<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.swganh.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Viaron</id>
		<title>SWGANH Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.swganh.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Viaron"/>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php/Special:Contributions/Viaron"/>
		<updated>2026-04-09T03:32:26Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257305</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257305"/>
				<updated>2014-12-09T05:18:37Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* WS - world snapshot */ OCD Punctuation fixing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFG Files provide setting and control information to the client. &lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
[Header Option]&lt;br /&gt;
Setting=Boolean&lt;br /&gt;
&lt;br /&gt;
NOTE: Boolean = True or False in the form of a 0 (false) and 1 (true), so to enable a setting would be&lt;br /&gt;
Setting=1&lt;br /&gt;
And to disable it (setting it to false) would be&lt;br /&gt;
Setting=0&lt;br /&gt;
&lt;br /&gt;
A full list of options that can be added or specified nto the user.cfg file of the client is: &lt;br /&gt;
&lt;br /&gt;
[SwgClient]&lt;br /&gt;
allowMultipleInstances&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
&lt;br /&gt;
[ClientAnimation]&lt;br /&gt;
logPriorityHandling&lt;br /&gt;
disableCombatTrumping&lt;br /&gt;
&lt;br /&gt;
[ClientAudio]&lt;br /&gt;
Enabled&lt;br /&gt;
disableMiles&lt;br /&gt;
&lt;br /&gt;
[ClientDirectInput]&lt;br /&gt;
useJoySticks&lt;br /&gt;
useMouse&lt;br /&gt;
windowsKeyEnabledWhenWindowed&lt;br /&gt;
windowsKeyEnabledWhenFullscreen&lt;br /&gt;
enableForceFeedback&lt;br /&gt;
&lt;br /&gt;
[ClientGame]&lt;br /&gt;
disablePreloadAssetManager&lt;br /&gt;
disableLensFlares&lt;br /&gt;
fogDisable&lt;br /&gt;
debugPrint&lt;br /&gt;
allowDefaultTemplateParams&lt;br /&gt;
autoConnectToLoginServer&lt;br /&gt;
autoConnectToCentralServer&lt;br /&gt;
autoConnectToGameServer&lt;br /&gt;
nextAutoConnectToGameServer&lt;br /&gt;
autoQuitAfterLoadScreen&lt;br /&gt;
skipIntro&lt;br /&gt;
skipSplash&lt;br /&gt;
hudDisabled&lt;br /&gt;
cuiTest&lt;br /&gt;
cuiStringList&lt;br /&gt;
testFloor&lt;br /&gt;
useCustomInputMaps&lt;br /&gt;
worldSnapshotIgnorePobChanges&lt;br /&gt;
disableRemoteObjectInterpolation&lt;br /&gt;
disableCreatureTurningAnimation&lt;br /&gt;
ambientLightInCells&lt;br /&gt;
logCombatActionmessages&lt;br /&gt;
logCombatPlaybackSelection&lt;br /&gt;
logFireProjectileAction&lt;br /&gt;
logGrenadeLobAction&lt;br /&gt;
logTrailActions&lt;br /&gt;
logCloneWeaponAction&lt;br /&gt;
forceTrailsOnAllActions&lt;br /&gt;
disableCombatSpecialMoveEffects&lt;br /&gt;
logContainerProcessing&lt;br /&gt;
debugPortalCameraPathDragPlayer&lt;br /&gt;
invertMouse&lt;br /&gt;
showAttachmentsInFirstPerson&lt;br /&gt;
characterCreationLoadoutsEnabled&lt;br /&gt;
autoInviteReject&lt;br /&gt;
preloadWorldSnapshot&lt;br /&gt;
profanityFiltered&lt;br /&gt;
runWhenMoving&lt;br /&gt;
showClientRegionChanges&lt;br /&gt;
preloadPlayerMusicManager&lt;br /&gt;
useInteriorLayoutFiles&lt;br /&gt;
allowShootingDeadTarget&lt;br /&gt;
enablePostIncapDeathPostureChangeLockoutPeriod&lt;br /&gt;
0fd345d9&lt;br /&gt;
allowCustomerContact&lt;br /&gt;
anonymousCrashReports&lt;br /&gt;
enableChatLogging&lt;br /&gt;
disableVehicleRiderCombatAnimationState&lt;br /&gt;
shipAutoLevelDefault&lt;br /&gt;
validateShipParkingLocation&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
SplitMeshTestRandomizationEnable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/ClientInteriorLayoutManager]&lt;br /&gt;
logApplyInteriorLayoutCreates&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics/ShaderPrimitiveSetTemplate]&lt;br /&gt;
createCollisionDataForNonCollidablePrimitives&lt;br /&gt;
&lt;br /&gt;
[SharedFoundation]&lt;br /&gt;
windowed&lt;br /&gt;
noExceptionHandling&lt;br /&gt;
fpuExceptionPrecision&lt;br /&gt;
fpuExceptionUnderflow&lt;br /&gt;
fpuExceptionOverflow&lt;br /&gt;
fpuExceptionZeroDivide&lt;br /&gt;
fpuExceptionDenormal&lt;br /&gt;
fpuExceptionInvalid&lt;br /&gt;
demoMode&lt;br /&gt;
useRemoteDebug&lt;br /&gt;
profilerExpandAllBranches&lt;br /&gt;
memoryManagerReportAllocations&lt;br /&gt;
memorymanagerReportOnOutOfMemory&lt;br /&gt;
memoryManagerDebugDumpOnRemove&lt;br /&gt;
lookUpCallStackNames&lt;br /&gt;
verboseHardWareLogging&lt;br /&gt;
verboseWarnings&lt;br /&gt;
causeAccessViolation&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics]&lt;br /&gt;
windowed&lt;br /&gt;
borderlessWindow&lt;br /&gt;
validateShaderImplementations&lt;br /&gt;
screenShotBackbuffer&lt;br /&gt;
disableMultiStreamVertexBuffers&lt;br /&gt;
disableOcclusionCulling&lt;br /&gt;
nPatchTest&lt;br /&gt;
logBadCustomizationData&lt;br /&gt;
useHardwareMouseCusor&lt;br /&gt;
hardwareMouseCursorUseOriginalAlpha&lt;br /&gt;
constraintMouseCursorToWindow&lt;br /&gt;
enableLightScaling&lt;br /&gt;
loadAllAssetsRegardlessOfShaderCapability&lt;br /&gt;
loadGpa&lt;br /&gt;
&lt;br /&gt;
[ClientObject]&lt;br /&gt;
disableShadowVolumeStreamerDetector&lt;br /&gt;
forceLowDetailLevels&lt;br /&gt;
forceHighDetailLevels&lt;br /&gt;
preloadDetailLevels&lt;br /&gt;
detailAppearancesWithoutSprites&lt;br /&gt;
disableMeshTestShapes&lt;br /&gt;
renderShadows&lt;br /&gt;
meshShadows&lt;br /&gt;
crossFadeEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientObject/DetailAppearanceTemplate]&lt;br /&gt;
skipL0&lt;br /&gt;
&lt;br /&gt;
[ClientParticle]&lt;br /&gt;
disable&lt;br /&gt;
&lt;br /&gt;
[ClientSkeletalAnimation]&lt;br /&gt;
skipL0&lt;br /&gt;
logStateTraversal&lt;br /&gt;
logActionSelection&lt;br /&gt;
logAnimationLoading&lt;br /&gt;
logAnimationlookup&lt;br /&gt;
logSktCreateDestroy&lt;br /&gt;
logStringSelectorAnimation&lt;br /&gt;
renderplaybackScriptFeedback&lt;br /&gt;
allowSameTrackTrumping&lt;br /&gt;
logSameTrackTrumping&lt;br /&gt;
lodManagerEnable&lt;br /&gt;
skeletonSegementsanityCheckerEnabled&lt;br /&gt;
optimizeSkinnedIndexBuffers&lt;br /&gt;
disableBatcher&lt;br /&gt;
&lt;br /&gt;
[ClientTerrain]&lt;br /&gt;
warmCache&lt;br /&gt;
UseOcclusion&lt;br /&gt;
useClientServerProceduralTerrainAppearanceTemplate&lt;br /&gt;
useRealGeometryForOcclusion&lt;br /&gt;
terrainMultiThreaded&lt;br /&gt;
radialFloraSortFrontToBack&lt;br /&gt;
showChunkExtents&lt;br /&gt;
heightBiasDisabled&lt;br /&gt;
enableFlora&lt;br /&gt;
preloadGroups&lt;br /&gt;
disableTerrainClouds&lt;br /&gt;
disableTimeOfDay&lt;br /&gt;
useNormalizedTime&lt;br /&gt;
disableTerrainBlending&lt;br /&gt;
sharedGroupUseFirstChildOnly&lt;br /&gt;
disableClouds&lt;br /&gt;
enableLightScaling&lt;br /&gt;
dynamicFarFloraEnabled&lt;br /&gt;
dynamicNearFloraEnabled&lt;br /&gt;
staticNonCollidableFloraEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientTextureRenderer]&lt;br /&gt;
disableTextureBaking&lt;br /&gt;
&lt;br /&gt;
[ClientUserInterface]&lt;br /&gt;
chatBubblesEnabled&lt;br /&gt;
chatBubblesMinimized&lt;br /&gt;
chatBubbleEmotesEnabled&lt;br /&gt;
drawObjectNames&lt;br /&gt;
drawSelfName&lt;br /&gt;
allowRadialMenuPickup&lt;br /&gt;
allowTargetAnything&lt;br /&gt;
debugExamine&lt;br /&gt;
enableStartupBugReporting&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadself&lt;br /&gt;
autoJoinChatRoomOnCreate&lt;br /&gt;
alwaysSetMouseCursor&lt;br /&gt;
chatTimeStampEnabled&lt;br /&gt;
testGroupWithNpcs&lt;br /&gt;
testImageDesignWithNpcs&lt;br /&gt;
joystickMovesPointer&lt;br /&gt;
confirmObjDelete&lt;br /&gt;
groundRadarTerrainEnabled&lt;br /&gt;
settingsEnabled&lt;br /&gt;
netStatusEnabled&lt;br /&gt;
pointerModeMouseCameraEnabled&lt;br /&gt;
mouseModeDefault&lt;br /&gt;
turnStrafesDuringMouseModeToggle&lt;br /&gt;
modalChat&lt;br /&gt;
useNewbieTutorial&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
useExpMonitor&lt;br /&gt;
targetNothingUntargets&lt;br /&gt;
drawObjectNamesPlayers&lt;br /&gt;
drawObjectNamesGroup&lt;br /&gt;
drawObjectNamesNpcs&lt;br /&gt;
drawObjectNamesGuild&lt;br /&gt;
fatalOnBadKnowledgeBaseEntry&lt;br /&gt;
fatalOnBadPoiEntry&lt;br /&gt;
displayLoadingBoxes&lt;br /&gt;
confirmCrafting&lt;br /&gt;
showPopupHelp&lt;br /&gt;
showIconNames&lt;br /&gt;
useWaypointMonitor&lt;br /&gt;
showWayPointArrowsOnScreen&lt;br /&gt;
dropShadowUiEnabled&lt;br /&gt;
dropShadowObjectNamesEnabled&lt;br /&gt;
rotateInventoryObjects&lt;br /&gt;
showInterestingAppearance&lt;br /&gt;
showModifiersWindow&lt;br /&gt;
showAFKSpeech&lt;br /&gt;
showNPCSpeech&lt;br /&gt;
reticleSelect&lt;br /&gt;
autoSortInventoryContents&lt;br /&gt;
autoSortDataPadContents&lt;br /&gt;
joystickInverted&lt;br /&gt;
cockpitCameraRecenterOnShipMovement&lt;br /&gt;
&lt;br /&gt;
[SharedDebug/InstallTimer]&lt;br /&gt;
enabled&lt;br /&gt;
&lt;br /&gt;
[SharedFile]&lt;br /&gt;
enableAsynchronousLoader&lt;br /&gt;
validateIff&lt;br /&gt;
&lt;br /&gt;
[SharedDebug]&lt;br /&gt;
strict&lt;br /&gt;
&lt;br /&gt;
[SharedImage]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedIoWin]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedMath]&lt;br /&gt;
reportRangeLoopWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedObject]&lt;br /&gt;
allowDisabledPortals&lt;br /&gt;
validateCellContentsAttached&lt;br /&gt;
validateWorld&lt;br /&gt;
logCustomizationDataIssues&lt;br /&gt;
debugAlterChecking&lt;br /&gt;
containerLoopChecking&lt;br /&gt;
allowDisallowObjectDelete&lt;br /&gt;
&lt;br /&gt;
[SharedRandom]&lt;br /&gt;
Sample&lt;br /&gt;
&lt;br /&gt;
[SharedTerrain]&lt;br /&gt;
disableGetHeight&lt;br /&gt;
debugReportInstall&lt;br /&gt;
debugReportLogPrint&lt;br /&gt;
disableFloraCaching&lt;br /&gt;
&lt;br /&gt;
[SharedUtility]&lt;br /&gt;
disableFileCaching&lt;br /&gt;
logOptionmanager&lt;br /&gt;
&lt;br /&gt;
[SharedGame]&lt;br /&gt;
sample&lt;br /&gt;
debugStringIds&lt;br /&gt;
fatalOnBadFormData&lt;br /&gt;
spamAsteroidGenerationData&lt;br /&gt;
displayBadStringIds&lt;br /&gt;
imageDesignerVerboseOutput&lt;br /&gt;
&lt;br /&gt;
[SharedGame/Appearancemanager]&lt;br /&gt;
verboseWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedNetwork]&lt;br /&gt;
logAllNetworkTraffic&lt;br /&gt;
processOnSend&lt;br /&gt;
processIcmpErrors&lt;br /&gt;
reportMessages&lt;br /&gt;
enableFlushAndConfirmAllData&lt;br /&gt;
dataOnConnectionClosed&lt;br /&gt;
useNetowrkThread&lt;br /&gt;
allowPortRemapping&lt;br /&gt;
useTcp&lt;br /&gt;
reportUdpDisconnects&lt;br /&gt;
reportTcpDisconnects&lt;br /&gt;
logConnectionConstructionDestruction&lt;br /&gt;
logConnectionOpenclosed&lt;br /&gt;
logConnectionDeferredMessagesWarning&lt;br /&gt;
logSendngTooMuchData&lt;br /&gt;
networkHandlerDispatchThrottle&lt;br /&gt;
&lt;br /&gt;
[SharedLog]&lt;br /&gt;
logReportLogs&lt;br /&gt;
logReportWarnings&lt;br /&gt;
logReportFatals&lt;br /&gt;
logStderr&lt;br /&gt;
&lt;br /&gt;
[ClientBugReporting]&lt;br /&gt;
disableToolBugReports&lt;br /&gt;
&lt;br /&gt;
[SharedPathFinding]&lt;br /&gt;
autoCreateBuildingPathNods&lt;br /&gt;
useCityRegions&lt;br /&gt;
jitterCityWaypoints&lt;br /&gt;
enableDirtyBoxes&lt;br /&gt;
enablePathScrubber&lt;br /&gt;
&lt;br /&gt;
[SharedRegex]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[ClientGame/Bloom]&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/OverheadMap]&lt;br /&gt;
allowRotate&lt;br /&gt;
&lt;br /&gt;
[ClientProceduralTerrainAppearance_LevelOfDetail]&lt;br /&gt;
useHeightBias&lt;br /&gt;
&lt;br /&gt;
[CuiCombatManager]&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadSelf&lt;br /&gt;
&lt;br /&gt;
[CuiChatManager]&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
chatBoxTimestamp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN - Mesh Generator File==&lt;br /&gt;
&lt;br /&gt;
For Dynamic Meshes. MGN stands for Skeletal Mesh GeNerator Template.&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR - Marker File==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3 - Audio File==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''Palette File'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16 '''CURRENTLY BROKEN LINK (LOOKING FOR OTHER -VIARON)'''&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH - Swoosh File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swoosh files create the effect trails on melee weapons, amongst other things.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/datatables/swoosh.iff&lt;br /&gt;
===&amp;gt; /appearance/&amp;lt;filename&amp;gt;.swh&lt;br /&gt;
======&amp;gt; /shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
======&amp;gt; /appearance/&amp;lt;filename&amp;gt;.prt (.PRT attachment is optional)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''World Snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257304</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257304"/>
				<updated>2014-12-09T05:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* MGN */ Updated Common Name and Description.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFG Files provide setting and control information to the client. &lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
[Header Option]&lt;br /&gt;
Setting=Boolean&lt;br /&gt;
&lt;br /&gt;
NOTE: Boolean = True or False in the form of a 0 (false) and 1 (true), so to enable a setting would be&lt;br /&gt;
Setting=1&lt;br /&gt;
And to disable it (setting it to false) would be&lt;br /&gt;
Setting=0&lt;br /&gt;
&lt;br /&gt;
A full list of options that can be added or specified nto the user.cfg file of the client is: &lt;br /&gt;
&lt;br /&gt;
[SwgClient]&lt;br /&gt;
allowMultipleInstances&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
&lt;br /&gt;
[ClientAnimation]&lt;br /&gt;
logPriorityHandling&lt;br /&gt;
disableCombatTrumping&lt;br /&gt;
&lt;br /&gt;
[ClientAudio]&lt;br /&gt;
Enabled&lt;br /&gt;
disableMiles&lt;br /&gt;
&lt;br /&gt;
[ClientDirectInput]&lt;br /&gt;
useJoySticks&lt;br /&gt;
useMouse&lt;br /&gt;
windowsKeyEnabledWhenWindowed&lt;br /&gt;
windowsKeyEnabledWhenFullscreen&lt;br /&gt;
enableForceFeedback&lt;br /&gt;
&lt;br /&gt;
[ClientGame]&lt;br /&gt;
disablePreloadAssetManager&lt;br /&gt;
disableLensFlares&lt;br /&gt;
fogDisable&lt;br /&gt;
debugPrint&lt;br /&gt;
allowDefaultTemplateParams&lt;br /&gt;
autoConnectToLoginServer&lt;br /&gt;
autoConnectToCentralServer&lt;br /&gt;
autoConnectToGameServer&lt;br /&gt;
nextAutoConnectToGameServer&lt;br /&gt;
autoQuitAfterLoadScreen&lt;br /&gt;
skipIntro&lt;br /&gt;
skipSplash&lt;br /&gt;
hudDisabled&lt;br /&gt;
cuiTest&lt;br /&gt;
cuiStringList&lt;br /&gt;
testFloor&lt;br /&gt;
useCustomInputMaps&lt;br /&gt;
worldSnapshotIgnorePobChanges&lt;br /&gt;
disableRemoteObjectInterpolation&lt;br /&gt;
disableCreatureTurningAnimation&lt;br /&gt;
ambientLightInCells&lt;br /&gt;
logCombatActionmessages&lt;br /&gt;
logCombatPlaybackSelection&lt;br /&gt;
logFireProjectileAction&lt;br /&gt;
logGrenadeLobAction&lt;br /&gt;
logTrailActions&lt;br /&gt;
logCloneWeaponAction&lt;br /&gt;
forceTrailsOnAllActions&lt;br /&gt;
disableCombatSpecialMoveEffects&lt;br /&gt;
logContainerProcessing&lt;br /&gt;
debugPortalCameraPathDragPlayer&lt;br /&gt;
invertMouse&lt;br /&gt;
showAttachmentsInFirstPerson&lt;br /&gt;
characterCreationLoadoutsEnabled&lt;br /&gt;
autoInviteReject&lt;br /&gt;
preloadWorldSnapshot&lt;br /&gt;
profanityFiltered&lt;br /&gt;
runWhenMoving&lt;br /&gt;
showClientRegionChanges&lt;br /&gt;
preloadPlayerMusicManager&lt;br /&gt;
useInteriorLayoutFiles&lt;br /&gt;
allowShootingDeadTarget&lt;br /&gt;
enablePostIncapDeathPostureChangeLockoutPeriod&lt;br /&gt;
0fd345d9&lt;br /&gt;
allowCustomerContact&lt;br /&gt;
anonymousCrashReports&lt;br /&gt;
enableChatLogging&lt;br /&gt;
disableVehicleRiderCombatAnimationState&lt;br /&gt;
shipAutoLevelDefault&lt;br /&gt;
validateShipParkingLocation&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
SplitMeshTestRandomizationEnable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/ClientInteriorLayoutManager]&lt;br /&gt;
logApplyInteriorLayoutCreates&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics/ShaderPrimitiveSetTemplate]&lt;br /&gt;
createCollisionDataForNonCollidablePrimitives&lt;br /&gt;
&lt;br /&gt;
[SharedFoundation]&lt;br /&gt;
windowed&lt;br /&gt;
noExceptionHandling&lt;br /&gt;
fpuExceptionPrecision&lt;br /&gt;
fpuExceptionUnderflow&lt;br /&gt;
fpuExceptionOverflow&lt;br /&gt;
fpuExceptionZeroDivide&lt;br /&gt;
fpuExceptionDenormal&lt;br /&gt;
fpuExceptionInvalid&lt;br /&gt;
demoMode&lt;br /&gt;
useRemoteDebug&lt;br /&gt;
profilerExpandAllBranches&lt;br /&gt;
memoryManagerReportAllocations&lt;br /&gt;
memorymanagerReportOnOutOfMemory&lt;br /&gt;
memoryManagerDebugDumpOnRemove&lt;br /&gt;
lookUpCallStackNames&lt;br /&gt;
verboseHardWareLogging&lt;br /&gt;
verboseWarnings&lt;br /&gt;
causeAccessViolation&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics]&lt;br /&gt;
windowed&lt;br /&gt;
borderlessWindow&lt;br /&gt;
validateShaderImplementations&lt;br /&gt;
screenShotBackbuffer&lt;br /&gt;
disableMultiStreamVertexBuffers&lt;br /&gt;
disableOcclusionCulling&lt;br /&gt;
nPatchTest&lt;br /&gt;
logBadCustomizationData&lt;br /&gt;
useHardwareMouseCusor&lt;br /&gt;
hardwareMouseCursorUseOriginalAlpha&lt;br /&gt;
constraintMouseCursorToWindow&lt;br /&gt;
enableLightScaling&lt;br /&gt;
loadAllAssetsRegardlessOfShaderCapability&lt;br /&gt;
loadGpa&lt;br /&gt;
&lt;br /&gt;
[ClientObject]&lt;br /&gt;
disableShadowVolumeStreamerDetector&lt;br /&gt;
forceLowDetailLevels&lt;br /&gt;
forceHighDetailLevels&lt;br /&gt;
preloadDetailLevels&lt;br /&gt;
detailAppearancesWithoutSprites&lt;br /&gt;
disableMeshTestShapes&lt;br /&gt;
renderShadows&lt;br /&gt;
meshShadows&lt;br /&gt;
crossFadeEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientObject/DetailAppearanceTemplate]&lt;br /&gt;
skipL0&lt;br /&gt;
&lt;br /&gt;
[ClientParticle]&lt;br /&gt;
disable&lt;br /&gt;
&lt;br /&gt;
[ClientSkeletalAnimation]&lt;br /&gt;
skipL0&lt;br /&gt;
logStateTraversal&lt;br /&gt;
logActionSelection&lt;br /&gt;
logAnimationLoading&lt;br /&gt;
logAnimationlookup&lt;br /&gt;
logSktCreateDestroy&lt;br /&gt;
logStringSelectorAnimation&lt;br /&gt;
renderplaybackScriptFeedback&lt;br /&gt;
allowSameTrackTrumping&lt;br /&gt;
logSameTrackTrumping&lt;br /&gt;
lodManagerEnable&lt;br /&gt;
skeletonSegementsanityCheckerEnabled&lt;br /&gt;
optimizeSkinnedIndexBuffers&lt;br /&gt;
disableBatcher&lt;br /&gt;
&lt;br /&gt;
[ClientTerrain]&lt;br /&gt;
warmCache&lt;br /&gt;
UseOcclusion&lt;br /&gt;
useClientServerProceduralTerrainAppearanceTemplate&lt;br /&gt;
useRealGeometryForOcclusion&lt;br /&gt;
terrainMultiThreaded&lt;br /&gt;
radialFloraSortFrontToBack&lt;br /&gt;
showChunkExtents&lt;br /&gt;
heightBiasDisabled&lt;br /&gt;
enableFlora&lt;br /&gt;
preloadGroups&lt;br /&gt;
disableTerrainClouds&lt;br /&gt;
disableTimeOfDay&lt;br /&gt;
useNormalizedTime&lt;br /&gt;
disableTerrainBlending&lt;br /&gt;
sharedGroupUseFirstChildOnly&lt;br /&gt;
disableClouds&lt;br /&gt;
enableLightScaling&lt;br /&gt;
dynamicFarFloraEnabled&lt;br /&gt;
dynamicNearFloraEnabled&lt;br /&gt;
staticNonCollidableFloraEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientTextureRenderer]&lt;br /&gt;
disableTextureBaking&lt;br /&gt;
&lt;br /&gt;
[ClientUserInterface]&lt;br /&gt;
chatBubblesEnabled&lt;br /&gt;
chatBubblesMinimized&lt;br /&gt;
chatBubbleEmotesEnabled&lt;br /&gt;
drawObjectNames&lt;br /&gt;
drawSelfName&lt;br /&gt;
allowRadialMenuPickup&lt;br /&gt;
allowTargetAnything&lt;br /&gt;
debugExamine&lt;br /&gt;
enableStartupBugReporting&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadself&lt;br /&gt;
autoJoinChatRoomOnCreate&lt;br /&gt;
alwaysSetMouseCursor&lt;br /&gt;
chatTimeStampEnabled&lt;br /&gt;
testGroupWithNpcs&lt;br /&gt;
testImageDesignWithNpcs&lt;br /&gt;
joystickMovesPointer&lt;br /&gt;
confirmObjDelete&lt;br /&gt;
groundRadarTerrainEnabled&lt;br /&gt;
settingsEnabled&lt;br /&gt;
netStatusEnabled&lt;br /&gt;
pointerModeMouseCameraEnabled&lt;br /&gt;
mouseModeDefault&lt;br /&gt;
turnStrafesDuringMouseModeToggle&lt;br /&gt;
modalChat&lt;br /&gt;
useNewbieTutorial&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
useExpMonitor&lt;br /&gt;
targetNothingUntargets&lt;br /&gt;
drawObjectNamesPlayers&lt;br /&gt;
drawObjectNamesGroup&lt;br /&gt;
drawObjectNamesNpcs&lt;br /&gt;
drawObjectNamesGuild&lt;br /&gt;
fatalOnBadKnowledgeBaseEntry&lt;br /&gt;
fatalOnBadPoiEntry&lt;br /&gt;
displayLoadingBoxes&lt;br /&gt;
confirmCrafting&lt;br /&gt;
showPopupHelp&lt;br /&gt;
showIconNames&lt;br /&gt;
useWaypointMonitor&lt;br /&gt;
showWayPointArrowsOnScreen&lt;br /&gt;
dropShadowUiEnabled&lt;br /&gt;
dropShadowObjectNamesEnabled&lt;br /&gt;
rotateInventoryObjects&lt;br /&gt;
showInterestingAppearance&lt;br /&gt;
showModifiersWindow&lt;br /&gt;
showAFKSpeech&lt;br /&gt;
showNPCSpeech&lt;br /&gt;
reticleSelect&lt;br /&gt;
autoSortInventoryContents&lt;br /&gt;
autoSortDataPadContents&lt;br /&gt;
joystickInverted&lt;br /&gt;
cockpitCameraRecenterOnShipMovement&lt;br /&gt;
&lt;br /&gt;
[SharedDebug/InstallTimer]&lt;br /&gt;
enabled&lt;br /&gt;
&lt;br /&gt;
[SharedFile]&lt;br /&gt;
enableAsynchronousLoader&lt;br /&gt;
validateIff&lt;br /&gt;
&lt;br /&gt;
[SharedDebug]&lt;br /&gt;
strict&lt;br /&gt;
&lt;br /&gt;
[SharedImage]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedIoWin]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedMath]&lt;br /&gt;
reportRangeLoopWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedObject]&lt;br /&gt;
allowDisabledPortals&lt;br /&gt;
validateCellContentsAttached&lt;br /&gt;
validateWorld&lt;br /&gt;
logCustomizationDataIssues&lt;br /&gt;
debugAlterChecking&lt;br /&gt;
containerLoopChecking&lt;br /&gt;
allowDisallowObjectDelete&lt;br /&gt;
&lt;br /&gt;
[SharedRandom]&lt;br /&gt;
Sample&lt;br /&gt;
&lt;br /&gt;
[SharedTerrain]&lt;br /&gt;
disableGetHeight&lt;br /&gt;
debugReportInstall&lt;br /&gt;
debugReportLogPrint&lt;br /&gt;
disableFloraCaching&lt;br /&gt;
&lt;br /&gt;
[SharedUtility]&lt;br /&gt;
disableFileCaching&lt;br /&gt;
logOptionmanager&lt;br /&gt;
&lt;br /&gt;
[SharedGame]&lt;br /&gt;
sample&lt;br /&gt;
debugStringIds&lt;br /&gt;
fatalOnBadFormData&lt;br /&gt;
spamAsteroidGenerationData&lt;br /&gt;
displayBadStringIds&lt;br /&gt;
imageDesignerVerboseOutput&lt;br /&gt;
&lt;br /&gt;
[SharedGame/Appearancemanager]&lt;br /&gt;
verboseWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedNetwork]&lt;br /&gt;
logAllNetworkTraffic&lt;br /&gt;
processOnSend&lt;br /&gt;
processIcmpErrors&lt;br /&gt;
reportMessages&lt;br /&gt;
enableFlushAndConfirmAllData&lt;br /&gt;
dataOnConnectionClosed&lt;br /&gt;
useNetowrkThread&lt;br /&gt;
allowPortRemapping&lt;br /&gt;
useTcp&lt;br /&gt;
reportUdpDisconnects&lt;br /&gt;
reportTcpDisconnects&lt;br /&gt;
logConnectionConstructionDestruction&lt;br /&gt;
logConnectionOpenclosed&lt;br /&gt;
logConnectionDeferredMessagesWarning&lt;br /&gt;
logSendngTooMuchData&lt;br /&gt;
networkHandlerDispatchThrottle&lt;br /&gt;
&lt;br /&gt;
[SharedLog]&lt;br /&gt;
logReportLogs&lt;br /&gt;
logReportWarnings&lt;br /&gt;
logReportFatals&lt;br /&gt;
logStderr&lt;br /&gt;
&lt;br /&gt;
[ClientBugReporting]&lt;br /&gt;
disableToolBugReports&lt;br /&gt;
&lt;br /&gt;
[SharedPathFinding]&lt;br /&gt;
autoCreateBuildingPathNods&lt;br /&gt;
useCityRegions&lt;br /&gt;
jitterCityWaypoints&lt;br /&gt;
enableDirtyBoxes&lt;br /&gt;
enablePathScrubber&lt;br /&gt;
&lt;br /&gt;
[SharedRegex]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[ClientGame/Bloom]&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/OverheadMap]&lt;br /&gt;
allowRotate&lt;br /&gt;
&lt;br /&gt;
[ClientProceduralTerrainAppearance_LevelOfDetail]&lt;br /&gt;
useHeightBias&lt;br /&gt;
&lt;br /&gt;
[CuiCombatManager]&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadSelf&lt;br /&gt;
&lt;br /&gt;
[CuiChatManager]&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
chatBoxTimestamp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN - Mesh Generator File==&lt;br /&gt;
&lt;br /&gt;
For Dynamic Meshes. MGN stands for Skeletal Mesh GeNerator Template.&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR - Marker File==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3 - Audio File==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''Palette File'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16 '''CURRENTLY BROKEN LINK (LOOKING FOR OTHER -VIARON)'''&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH - Swoosh File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swoosh files create the effect trails on melee weapons, amongst other things.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/datatables/swoosh.iff&lt;br /&gt;
===&amp;gt; /appearance/&amp;lt;filename&amp;gt;.swh&lt;br /&gt;
======&amp;gt; /shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
======&amp;gt; /appearance/&amp;lt;filename&amp;gt;.prt (.PRT attachment is optional)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257303</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257303"/>
				<updated>2014-12-09T05:15:48Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* PAL - palette */ Updated Common Name &amp;amp; Download Link for Mod&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFG Files provide setting and control information to the client. &lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
[Header Option]&lt;br /&gt;
Setting=Boolean&lt;br /&gt;
&lt;br /&gt;
NOTE: Boolean = True or False in the form of a 0 (false) and 1 (true), so to enable a setting would be&lt;br /&gt;
Setting=1&lt;br /&gt;
And to disable it (setting it to false) would be&lt;br /&gt;
Setting=0&lt;br /&gt;
&lt;br /&gt;
A full list of options that can be added or specified nto the user.cfg file of the client is: &lt;br /&gt;
&lt;br /&gt;
[SwgClient]&lt;br /&gt;
allowMultipleInstances&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
&lt;br /&gt;
[ClientAnimation]&lt;br /&gt;
logPriorityHandling&lt;br /&gt;
disableCombatTrumping&lt;br /&gt;
&lt;br /&gt;
[ClientAudio]&lt;br /&gt;
Enabled&lt;br /&gt;
disableMiles&lt;br /&gt;
&lt;br /&gt;
[ClientDirectInput]&lt;br /&gt;
useJoySticks&lt;br /&gt;
useMouse&lt;br /&gt;
windowsKeyEnabledWhenWindowed&lt;br /&gt;
windowsKeyEnabledWhenFullscreen&lt;br /&gt;
enableForceFeedback&lt;br /&gt;
&lt;br /&gt;
[ClientGame]&lt;br /&gt;
disablePreloadAssetManager&lt;br /&gt;
disableLensFlares&lt;br /&gt;
fogDisable&lt;br /&gt;
debugPrint&lt;br /&gt;
allowDefaultTemplateParams&lt;br /&gt;
autoConnectToLoginServer&lt;br /&gt;
autoConnectToCentralServer&lt;br /&gt;
autoConnectToGameServer&lt;br /&gt;
nextAutoConnectToGameServer&lt;br /&gt;
autoQuitAfterLoadScreen&lt;br /&gt;
skipIntro&lt;br /&gt;
skipSplash&lt;br /&gt;
hudDisabled&lt;br /&gt;
cuiTest&lt;br /&gt;
cuiStringList&lt;br /&gt;
testFloor&lt;br /&gt;
useCustomInputMaps&lt;br /&gt;
worldSnapshotIgnorePobChanges&lt;br /&gt;
disableRemoteObjectInterpolation&lt;br /&gt;
disableCreatureTurningAnimation&lt;br /&gt;
ambientLightInCells&lt;br /&gt;
logCombatActionmessages&lt;br /&gt;
logCombatPlaybackSelection&lt;br /&gt;
logFireProjectileAction&lt;br /&gt;
logGrenadeLobAction&lt;br /&gt;
logTrailActions&lt;br /&gt;
logCloneWeaponAction&lt;br /&gt;
forceTrailsOnAllActions&lt;br /&gt;
disableCombatSpecialMoveEffects&lt;br /&gt;
logContainerProcessing&lt;br /&gt;
debugPortalCameraPathDragPlayer&lt;br /&gt;
invertMouse&lt;br /&gt;
showAttachmentsInFirstPerson&lt;br /&gt;
characterCreationLoadoutsEnabled&lt;br /&gt;
autoInviteReject&lt;br /&gt;
preloadWorldSnapshot&lt;br /&gt;
profanityFiltered&lt;br /&gt;
runWhenMoving&lt;br /&gt;
showClientRegionChanges&lt;br /&gt;
preloadPlayerMusicManager&lt;br /&gt;
useInteriorLayoutFiles&lt;br /&gt;
allowShootingDeadTarget&lt;br /&gt;
enablePostIncapDeathPostureChangeLockoutPeriod&lt;br /&gt;
0fd345d9&lt;br /&gt;
allowCustomerContact&lt;br /&gt;
anonymousCrashReports&lt;br /&gt;
enableChatLogging&lt;br /&gt;
disableVehicleRiderCombatAnimationState&lt;br /&gt;
shipAutoLevelDefault&lt;br /&gt;
validateShipParkingLocation&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
SplitMeshTestRandomizationEnable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/ClientInteriorLayoutManager]&lt;br /&gt;
logApplyInteriorLayoutCreates&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics/ShaderPrimitiveSetTemplate]&lt;br /&gt;
createCollisionDataForNonCollidablePrimitives&lt;br /&gt;
&lt;br /&gt;
[SharedFoundation]&lt;br /&gt;
windowed&lt;br /&gt;
noExceptionHandling&lt;br /&gt;
fpuExceptionPrecision&lt;br /&gt;
fpuExceptionUnderflow&lt;br /&gt;
fpuExceptionOverflow&lt;br /&gt;
fpuExceptionZeroDivide&lt;br /&gt;
fpuExceptionDenormal&lt;br /&gt;
fpuExceptionInvalid&lt;br /&gt;
demoMode&lt;br /&gt;
useRemoteDebug&lt;br /&gt;
profilerExpandAllBranches&lt;br /&gt;
memoryManagerReportAllocations&lt;br /&gt;
memorymanagerReportOnOutOfMemory&lt;br /&gt;
memoryManagerDebugDumpOnRemove&lt;br /&gt;
lookUpCallStackNames&lt;br /&gt;
verboseHardWareLogging&lt;br /&gt;
verboseWarnings&lt;br /&gt;
causeAccessViolation&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics]&lt;br /&gt;
windowed&lt;br /&gt;
borderlessWindow&lt;br /&gt;
validateShaderImplementations&lt;br /&gt;
screenShotBackbuffer&lt;br /&gt;
disableMultiStreamVertexBuffers&lt;br /&gt;
disableOcclusionCulling&lt;br /&gt;
nPatchTest&lt;br /&gt;
logBadCustomizationData&lt;br /&gt;
useHardwareMouseCusor&lt;br /&gt;
hardwareMouseCursorUseOriginalAlpha&lt;br /&gt;
constraintMouseCursorToWindow&lt;br /&gt;
enableLightScaling&lt;br /&gt;
loadAllAssetsRegardlessOfShaderCapability&lt;br /&gt;
loadGpa&lt;br /&gt;
&lt;br /&gt;
[ClientObject]&lt;br /&gt;
disableShadowVolumeStreamerDetector&lt;br /&gt;
forceLowDetailLevels&lt;br /&gt;
forceHighDetailLevels&lt;br /&gt;
preloadDetailLevels&lt;br /&gt;
detailAppearancesWithoutSprites&lt;br /&gt;
disableMeshTestShapes&lt;br /&gt;
renderShadows&lt;br /&gt;
meshShadows&lt;br /&gt;
crossFadeEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientObject/DetailAppearanceTemplate]&lt;br /&gt;
skipL0&lt;br /&gt;
&lt;br /&gt;
[ClientParticle]&lt;br /&gt;
disable&lt;br /&gt;
&lt;br /&gt;
[ClientSkeletalAnimation]&lt;br /&gt;
skipL0&lt;br /&gt;
logStateTraversal&lt;br /&gt;
logActionSelection&lt;br /&gt;
logAnimationLoading&lt;br /&gt;
logAnimationlookup&lt;br /&gt;
logSktCreateDestroy&lt;br /&gt;
logStringSelectorAnimation&lt;br /&gt;
renderplaybackScriptFeedback&lt;br /&gt;
allowSameTrackTrumping&lt;br /&gt;
logSameTrackTrumping&lt;br /&gt;
lodManagerEnable&lt;br /&gt;
skeletonSegementsanityCheckerEnabled&lt;br /&gt;
optimizeSkinnedIndexBuffers&lt;br /&gt;
disableBatcher&lt;br /&gt;
&lt;br /&gt;
[ClientTerrain]&lt;br /&gt;
warmCache&lt;br /&gt;
UseOcclusion&lt;br /&gt;
useClientServerProceduralTerrainAppearanceTemplate&lt;br /&gt;
useRealGeometryForOcclusion&lt;br /&gt;
terrainMultiThreaded&lt;br /&gt;
radialFloraSortFrontToBack&lt;br /&gt;
showChunkExtents&lt;br /&gt;
heightBiasDisabled&lt;br /&gt;
enableFlora&lt;br /&gt;
preloadGroups&lt;br /&gt;
disableTerrainClouds&lt;br /&gt;
disableTimeOfDay&lt;br /&gt;
useNormalizedTime&lt;br /&gt;
disableTerrainBlending&lt;br /&gt;
sharedGroupUseFirstChildOnly&lt;br /&gt;
disableClouds&lt;br /&gt;
enableLightScaling&lt;br /&gt;
dynamicFarFloraEnabled&lt;br /&gt;
dynamicNearFloraEnabled&lt;br /&gt;
staticNonCollidableFloraEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientTextureRenderer]&lt;br /&gt;
disableTextureBaking&lt;br /&gt;
&lt;br /&gt;
[ClientUserInterface]&lt;br /&gt;
chatBubblesEnabled&lt;br /&gt;
chatBubblesMinimized&lt;br /&gt;
chatBubbleEmotesEnabled&lt;br /&gt;
drawObjectNames&lt;br /&gt;
drawSelfName&lt;br /&gt;
allowRadialMenuPickup&lt;br /&gt;
allowTargetAnything&lt;br /&gt;
debugExamine&lt;br /&gt;
enableStartupBugReporting&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadself&lt;br /&gt;
autoJoinChatRoomOnCreate&lt;br /&gt;
alwaysSetMouseCursor&lt;br /&gt;
chatTimeStampEnabled&lt;br /&gt;
testGroupWithNpcs&lt;br /&gt;
testImageDesignWithNpcs&lt;br /&gt;
joystickMovesPointer&lt;br /&gt;
confirmObjDelete&lt;br /&gt;
groundRadarTerrainEnabled&lt;br /&gt;
settingsEnabled&lt;br /&gt;
netStatusEnabled&lt;br /&gt;
pointerModeMouseCameraEnabled&lt;br /&gt;
mouseModeDefault&lt;br /&gt;
turnStrafesDuringMouseModeToggle&lt;br /&gt;
modalChat&lt;br /&gt;
useNewbieTutorial&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
useExpMonitor&lt;br /&gt;
targetNothingUntargets&lt;br /&gt;
drawObjectNamesPlayers&lt;br /&gt;
drawObjectNamesGroup&lt;br /&gt;
drawObjectNamesNpcs&lt;br /&gt;
drawObjectNamesGuild&lt;br /&gt;
fatalOnBadKnowledgeBaseEntry&lt;br /&gt;
fatalOnBadPoiEntry&lt;br /&gt;
displayLoadingBoxes&lt;br /&gt;
confirmCrafting&lt;br /&gt;
showPopupHelp&lt;br /&gt;
showIconNames&lt;br /&gt;
useWaypointMonitor&lt;br /&gt;
showWayPointArrowsOnScreen&lt;br /&gt;
dropShadowUiEnabled&lt;br /&gt;
dropShadowObjectNamesEnabled&lt;br /&gt;
rotateInventoryObjects&lt;br /&gt;
showInterestingAppearance&lt;br /&gt;
showModifiersWindow&lt;br /&gt;
showAFKSpeech&lt;br /&gt;
showNPCSpeech&lt;br /&gt;
reticleSelect&lt;br /&gt;
autoSortInventoryContents&lt;br /&gt;
autoSortDataPadContents&lt;br /&gt;
joystickInverted&lt;br /&gt;
cockpitCameraRecenterOnShipMovement&lt;br /&gt;
&lt;br /&gt;
[SharedDebug/InstallTimer]&lt;br /&gt;
enabled&lt;br /&gt;
&lt;br /&gt;
[SharedFile]&lt;br /&gt;
enableAsynchronousLoader&lt;br /&gt;
validateIff&lt;br /&gt;
&lt;br /&gt;
[SharedDebug]&lt;br /&gt;
strict&lt;br /&gt;
&lt;br /&gt;
[SharedImage]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedIoWin]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedMath]&lt;br /&gt;
reportRangeLoopWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedObject]&lt;br /&gt;
allowDisabledPortals&lt;br /&gt;
validateCellContentsAttached&lt;br /&gt;
validateWorld&lt;br /&gt;
logCustomizationDataIssues&lt;br /&gt;
debugAlterChecking&lt;br /&gt;
containerLoopChecking&lt;br /&gt;
allowDisallowObjectDelete&lt;br /&gt;
&lt;br /&gt;
[SharedRandom]&lt;br /&gt;
Sample&lt;br /&gt;
&lt;br /&gt;
[SharedTerrain]&lt;br /&gt;
disableGetHeight&lt;br /&gt;
debugReportInstall&lt;br /&gt;
debugReportLogPrint&lt;br /&gt;
disableFloraCaching&lt;br /&gt;
&lt;br /&gt;
[SharedUtility]&lt;br /&gt;
disableFileCaching&lt;br /&gt;
logOptionmanager&lt;br /&gt;
&lt;br /&gt;
[SharedGame]&lt;br /&gt;
sample&lt;br /&gt;
debugStringIds&lt;br /&gt;
fatalOnBadFormData&lt;br /&gt;
spamAsteroidGenerationData&lt;br /&gt;
displayBadStringIds&lt;br /&gt;
imageDesignerVerboseOutput&lt;br /&gt;
&lt;br /&gt;
[SharedGame/Appearancemanager]&lt;br /&gt;
verboseWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedNetwork]&lt;br /&gt;
logAllNetworkTraffic&lt;br /&gt;
processOnSend&lt;br /&gt;
processIcmpErrors&lt;br /&gt;
reportMessages&lt;br /&gt;
enableFlushAndConfirmAllData&lt;br /&gt;
dataOnConnectionClosed&lt;br /&gt;
useNetowrkThread&lt;br /&gt;
allowPortRemapping&lt;br /&gt;
useTcp&lt;br /&gt;
reportUdpDisconnects&lt;br /&gt;
reportTcpDisconnects&lt;br /&gt;
logConnectionConstructionDestruction&lt;br /&gt;
logConnectionOpenclosed&lt;br /&gt;
logConnectionDeferredMessagesWarning&lt;br /&gt;
logSendngTooMuchData&lt;br /&gt;
networkHandlerDispatchThrottle&lt;br /&gt;
&lt;br /&gt;
[SharedLog]&lt;br /&gt;
logReportLogs&lt;br /&gt;
logReportWarnings&lt;br /&gt;
logReportFatals&lt;br /&gt;
logStderr&lt;br /&gt;
&lt;br /&gt;
[ClientBugReporting]&lt;br /&gt;
disableToolBugReports&lt;br /&gt;
&lt;br /&gt;
[SharedPathFinding]&lt;br /&gt;
autoCreateBuildingPathNods&lt;br /&gt;
useCityRegions&lt;br /&gt;
jitterCityWaypoints&lt;br /&gt;
enableDirtyBoxes&lt;br /&gt;
enablePathScrubber&lt;br /&gt;
&lt;br /&gt;
[SharedRegex]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[ClientGame/Bloom]&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/OverheadMap]&lt;br /&gt;
allowRotate&lt;br /&gt;
&lt;br /&gt;
[ClientProceduralTerrainAppearance_LevelOfDetail]&lt;br /&gt;
useHeightBias&lt;br /&gt;
&lt;br /&gt;
[CuiCombatManager]&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadSelf&lt;br /&gt;
&lt;br /&gt;
[CuiChatManager]&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
chatBoxTimestamp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR - Marker File==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3 - Audio File==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''Palette File'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16 '''CURRENTLY BROKEN LINK (LOOKING FOR OTHER -VIARON)'''&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH - Swoosh File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swoosh files create the effect trails on melee weapons, amongst other things.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/datatables/swoosh.iff&lt;br /&gt;
===&amp;gt; /appearance/&amp;lt;filename&amp;gt;.swh&lt;br /&gt;
======&amp;gt; /shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
======&amp;gt; /appearance/&amp;lt;filename&amp;gt;.prt (.PRT attachment is optional)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257302</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257302"/>
				<updated>2014-12-09T05:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* MP3 */ Updated Common File Name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFG Files provide setting and control information to the client. &lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
[Header Option]&lt;br /&gt;
Setting=Boolean&lt;br /&gt;
&lt;br /&gt;
NOTE: Boolean = True or False in the form of a 0 (false) and 1 (true), so to enable a setting would be&lt;br /&gt;
Setting=1&lt;br /&gt;
And to disable it (setting it to false) would be&lt;br /&gt;
Setting=0&lt;br /&gt;
&lt;br /&gt;
A full list of options that can be added or specified nto the user.cfg file of the client is: &lt;br /&gt;
&lt;br /&gt;
[SwgClient]&lt;br /&gt;
allowMultipleInstances&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
&lt;br /&gt;
[ClientAnimation]&lt;br /&gt;
logPriorityHandling&lt;br /&gt;
disableCombatTrumping&lt;br /&gt;
&lt;br /&gt;
[ClientAudio]&lt;br /&gt;
Enabled&lt;br /&gt;
disableMiles&lt;br /&gt;
&lt;br /&gt;
[ClientDirectInput]&lt;br /&gt;
useJoySticks&lt;br /&gt;
useMouse&lt;br /&gt;
windowsKeyEnabledWhenWindowed&lt;br /&gt;
windowsKeyEnabledWhenFullscreen&lt;br /&gt;
enableForceFeedback&lt;br /&gt;
&lt;br /&gt;
[ClientGame]&lt;br /&gt;
disablePreloadAssetManager&lt;br /&gt;
disableLensFlares&lt;br /&gt;
fogDisable&lt;br /&gt;
debugPrint&lt;br /&gt;
allowDefaultTemplateParams&lt;br /&gt;
autoConnectToLoginServer&lt;br /&gt;
autoConnectToCentralServer&lt;br /&gt;
autoConnectToGameServer&lt;br /&gt;
nextAutoConnectToGameServer&lt;br /&gt;
autoQuitAfterLoadScreen&lt;br /&gt;
skipIntro&lt;br /&gt;
skipSplash&lt;br /&gt;
hudDisabled&lt;br /&gt;
cuiTest&lt;br /&gt;
cuiStringList&lt;br /&gt;
testFloor&lt;br /&gt;
useCustomInputMaps&lt;br /&gt;
worldSnapshotIgnorePobChanges&lt;br /&gt;
disableRemoteObjectInterpolation&lt;br /&gt;
disableCreatureTurningAnimation&lt;br /&gt;
ambientLightInCells&lt;br /&gt;
logCombatActionmessages&lt;br /&gt;
logCombatPlaybackSelection&lt;br /&gt;
logFireProjectileAction&lt;br /&gt;
logGrenadeLobAction&lt;br /&gt;
logTrailActions&lt;br /&gt;
logCloneWeaponAction&lt;br /&gt;
forceTrailsOnAllActions&lt;br /&gt;
disableCombatSpecialMoveEffects&lt;br /&gt;
logContainerProcessing&lt;br /&gt;
debugPortalCameraPathDragPlayer&lt;br /&gt;
invertMouse&lt;br /&gt;
showAttachmentsInFirstPerson&lt;br /&gt;
characterCreationLoadoutsEnabled&lt;br /&gt;
autoInviteReject&lt;br /&gt;
preloadWorldSnapshot&lt;br /&gt;
profanityFiltered&lt;br /&gt;
runWhenMoving&lt;br /&gt;
showClientRegionChanges&lt;br /&gt;
preloadPlayerMusicManager&lt;br /&gt;
useInteriorLayoutFiles&lt;br /&gt;
allowShootingDeadTarget&lt;br /&gt;
enablePostIncapDeathPostureChangeLockoutPeriod&lt;br /&gt;
0fd345d9&lt;br /&gt;
allowCustomerContact&lt;br /&gt;
anonymousCrashReports&lt;br /&gt;
enableChatLogging&lt;br /&gt;
disableVehicleRiderCombatAnimationState&lt;br /&gt;
shipAutoLevelDefault&lt;br /&gt;
validateShipParkingLocation&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
SplitMeshTestRandomizationEnable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/ClientInteriorLayoutManager]&lt;br /&gt;
logApplyInteriorLayoutCreates&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics/ShaderPrimitiveSetTemplate]&lt;br /&gt;
createCollisionDataForNonCollidablePrimitives&lt;br /&gt;
&lt;br /&gt;
[SharedFoundation]&lt;br /&gt;
windowed&lt;br /&gt;
noExceptionHandling&lt;br /&gt;
fpuExceptionPrecision&lt;br /&gt;
fpuExceptionUnderflow&lt;br /&gt;
fpuExceptionOverflow&lt;br /&gt;
fpuExceptionZeroDivide&lt;br /&gt;
fpuExceptionDenormal&lt;br /&gt;
fpuExceptionInvalid&lt;br /&gt;
demoMode&lt;br /&gt;
useRemoteDebug&lt;br /&gt;
profilerExpandAllBranches&lt;br /&gt;
memoryManagerReportAllocations&lt;br /&gt;
memorymanagerReportOnOutOfMemory&lt;br /&gt;
memoryManagerDebugDumpOnRemove&lt;br /&gt;
lookUpCallStackNames&lt;br /&gt;
verboseHardWareLogging&lt;br /&gt;
verboseWarnings&lt;br /&gt;
causeAccessViolation&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics]&lt;br /&gt;
windowed&lt;br /&gt;
borderlessWindow&lt;br /&gt;
validateShaderImplementations&lt;br /&gt;
screenShotBackbuffer&lt;br /&gt;
disableMultiStreamVertexBuffers&lt;br /&gt;
disableOcclusionCulling&lt;br /&gt;
nPatchTest&lt;br /&gt;
logBadCustomizationData&lt;br /&gt;
useHardwareMouseCusor&lt;br /&gt;
hardwareMouseCursorUseOriginalAlpha&lt;br /&gt;
constraintMouseCursorToWindow&lt;br /&gt;
enableLightScaling&lt;br /&gt;
loadAllAssetsRegardlessOfShaderCapability&lt;br /&gt;
loadGpa&lt;br /&gt;
&lt;br /&gt;
[ClientObject]&lt;br /&gt;
disableShadowVolumeStreamerDetector&lt;br /&gt;
forceLowDetailLevels&lt;br /&gt;
forceHighDetailLevels&lt;br /&gt;
preloadDetailLevels&lt;br /&gt;
detailAppearancesWithoutSprites&lt;br /&gt;
disableMeshTestShapes&lt;br /&gt;
renderShadows&lt;br /&gt;
meshShadows&lt;br /&gt;
crossFadeEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientObject/DetailAppearanceTemplate]&lt;br /&gt;
skipL0&lt;br /&gt;
&lt;br /&gt;
[ClientParticle]&lt;br /&gt;
disable&lt;br /&gt;
&lt;br /&gt;
[ClientSkeletalAnimation]&lt;br /&gt;
skipL0&lt;br /&gt;
logStateTraversal&lt;br /&gt;
logActionSelection&lt;br /&gt;
logAnimationLoading&lt;br /&gt;
logAnimationlookup&lt;br /&gt;
logSktCreateDestroy&lt;br /&gt;
logStringSelectorAnimation&lt;br /&gt;
renderplaybackScriptFeedback&lt;br /&gt;
allowSameTrackTrumping&lt;br /&gt;
logSameTrackTrumping&lt;br /&gt;
lodManagerEnable&lt;br /&gt;
skeletonSegementsanityCheckerEnabled&lt;br /&gt;
optimizeSkinnedIndexBuffers&lt;br /&gt;
disableBatcher&lt;br /&gt;
&lt;br /&gt;
[ClientTerrain]&lt;br /&gt;
warmCache&lt;br /&gt;
UseOcclusion&lt;br /&gt;
useClientServerProceduralTerrainAppearanceTemplate&lt;br /&gt;
useRealGeometryForOcclusion&lt;br /&gt;
terrainMultiThreaded&lt;br /&gt;
radialFloraSortFrontToBack&lt;br /&gt;
showChunkExtents&lt;br /&gt;
heightBiasDisabled&lt;br /&gt;
enableFlora&lt;br /&gt;
preloadGroups&lt;br /&gt;
disableTerrainClouds&lt;br /&gt;
disableTimeOfDay&lt;br /&gt;
useNormalizedTime&lt;br /&gt;
disableTerrainBlending&lt;br /&gt;
sharedGroupUseFirstChildOnly&lt;br /&gt;
disableClouds&lt;br /&gt;
enableLightScaling&lt;br /&gt;
dynamicFarFloraEnabled&lt;br /&gt;
dynamicNearFloraEnabled&lt;br /&gt;
staticNonCollidableFloraEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientTextureRenderer]&lt;br /&gt;
disableTextureBaking&lt;br /&gt;
&lt;br /&gt;
[ClientUserInterface]&lt;br /&gt;
chatBubblesEnabled&lt;br /&gt;
chatBubblesMinimized&lt;br /&gt;
chatBubbleEmotesEnabled&lt;br /&gt;
drawObjectNames&lt;br /&gt;
drawSelfName&lt;br /&gt;
allowRadialMenuPickup&lt;br /&gt;
allowTargetAnything&lt;br /&gt;
debugExamine&lt;br /&gt;
enableStartupBugReporting&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadself&lt;br /&gt;
autoJoinChatRoomOnCreate&lt;br /&gt;
alwaysSetMouseCursor&lt;br /&gt;
chatTimeStampEnabled&lt;br /&gt;
testGroupWithNpcs&lt;br /&gt;
testImageDesignWithNpcs&lt;br /&gt;
joystickMovesPointer&lt;br /&gt;
confirmObjDelete&lt;br /&gt;
groundRadarTerrainEnabled&lt;br /&gt;
settingsEnabled&lt;br /&gt;
netStatusEnabled&lt;br /&gt;
pointerModeMouseCameraEnabled&lt;br /&gt;
mouseModeDefault&lt;br /&gt;
turnStrafesDuringMouseModeToggle&lt;br /&gt;
modalChat&lt;br /&gt;
useNewbieTutorial&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
useExpMonitor&lt;br /&gt;
targetNothingUntargets&lt;br /&gt;
drawObjectNamesPlayers&lt;br /&gt;
drawObjectNamesGroup&lt;br /&gt;
drawObjectNamesNpcs&lt;br /&gt;
drawObjectNamesGuild&lt;br /&gt;
fatalOnBadKnowledgeBaseEntry&lt;br /&gt;
fatalOnBadPoiEntry&lt;br /&gt;
displayLoadingBoxes&lt;br /&gt;
confirmCrafting&lt;br /&gt;
showPopupHelp&lt;br /&gt;
showIconNames&lt;br /&gt;
useWaypointMonitor&lt;br /&gt;
showWayPointArrowsOnScreen&lt;br /&gt;
dropShadowUiEnabled&lt;br /&gt;
dropShadowObjectNamesEnabled&lt;br /&gt;
rotateInventoryObjects&lt;br /&gt;
showInterestingAppearance&lt;br /&gt;
showModifiersWindow&lt;br /&gt;
showAFKSpeech&lt;br /&gt;
showNPCSpeech&lt;br /&gt;
reticleSelect&lt;br /&gt;
autoSortInventoryContents&lt;br /&gt;
autoSortDataPadContents&lt;br /&gt;
joystickInverted&lt;br /&gt;
cockpitCameraRecenterOnShipMovement&lt;br /&gt;
&lt;br /&gt;
[SharedDebug/InstallTimer]&lt;br /&gt;
enabled&lt;br /&gt;
&lt;br /&gt;
[SharedFile]&lt;br /&gt;
enableAsynchronousLoader&lt;br /&gt;
validateIff&lt;br /&gt;
&lt;br /&gt;
[SharedDebug]&lt;br /&gt;
strict&lt;br /&gt;
&lt;br /&gt;
[SharedImage]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedIoWin]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedMath]&lt;br /&gt;
reportRangeLoopWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedObject]&lt;br /&gt;
allowDisabledPortals&lt;br /&gt;
validateCellContentsAttached&lt;br /&gt;
validateWorld&lt;br /&gt;
logCustomizationDataIssues&lt;br /&gt;
debugAlterChecking&lt;br /&gt;
containerLoopChecking&lt;br /&gt;
allowDisallowObjectDelete&lt;br /&gt;
&lt;br /&gt;
[SharedRandom]&lt;br /&gt;
Sample&lt;br /&gt;
&lt;br /&gt;
[SharedTerrain]&lt;br /&gt;
disableGetHeight&lt;br /&gt;
debugReportInstall&lt;br /&gt;
debugReportLogPrint&lt;br /&gt;
disableFloraCaching&lt;br /&gt;
&lt;br /&gt;
[SharedUtility]&lt;br /&gt;
disableFileCaching&lt;br /&gt;
logOptionmanager&lt;br /&gt;
&lt;br /&gt;
[SharedGame]&lt;br /&gt;
sample&lt;br /&gt;
debugStringIds&lt;br /&gt;
fatalOnBadFormData&lt;br /&gt;
spamAsteroidGenerationData&lt;br /&gt;
displayBadStringIds&lt;br /&gt;
imageDesignerVerboseOutput&lt;br /&gt;
&lt;br /&gt;
[SharedGame/Appearancemanager]&lt;br /&gt;
verboseWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedNetwork]&lt;br /&gt;
logAllNetworkTraffic&lt;br /&gt;
processOnSend&lt;br /&gt;
processIcmpErrors&lt;br /&gt;
reportMessages&lt;br /&gt;
enableFlushAndConfirmAllData&lt;br /&gt;
dataOnConnectionClosed&lt;br /&gt;
useNetowrkThread&lt;br /&gt;
allowPortRemapping&lt;br /&gt;
useTcp&lt;br /&gt;
reportUdpDisconnects&lt;br /&gt;
reportTcpDisconnects&lt;br /&gt;
logConnectionConstructionDestruction&lt;br /&gt;
logConnectionOpenclosed&lt;br /&gt;
logConnectionDeferredMessagesWarning&lt;br /&gt;
logSendngTooMuchData&lt;br /&gt;
networkHandlerDispatchThrottle&lt;br /&gt;
&lt;br /&gt;
[SharedLog]&lt;br /&gt;
logReportLogs&lt;br /&gt;
logReportWarnings&lt;br /&gt;
logReportFatals&lt;br /&gt;
logStderr&lt;br /&gt;
&lt;br /&gt;
[ClientBugReporting]&lt;br /&gt;
disableToolBugReports&lt;br /&gt;
&lt;br /&gt;
[SharedPathFinding]&lt;br /&gt;
autoCreateBuildingPathNods&lt;br /&gt;
useCityRegions&lt;br /&gt;
jitterCityWaypoints&lt;br /&gt;
enableDirtyBoxes&lt;br /&gt;
enablePathScrubber&lt;br /&gt;
&lt;br /&gt;
[SharedRegex]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[ClientGame/Bloom]&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/OverheadMap]&lt;br /&gt;
allowRotate&lt;br /&gt;
&lt;br /&gt;
[ClientProceduralTerrainAppearance_LevelOfDetail]&lt;br /&gt;
useHeightBias&lt;br /&gt;
&lt;br /&gt;
[CuiCombatManager]&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadSelf&lt;br /&gt;
&lt;br /&gt;
[CuiChatManager]&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
chatBoxTimestamp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR - Marker File==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3 - Audio File==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH - Swoosh File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swoosh files create the effect trails on melee weapons, amongst other things.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/datatables/swoosh.iff&lt;br /&gt;
===&amp;gt; /appearance/&amp;lt;filename&amp;gt;.swh&lt;br /&gt;
======&amp;gt; /shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
======&amp;gt; /appearance/&amp;lt;filename&amp;gt;.prt (.PRT attachment is optional)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257301</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257301"/>
				<updated>2014-12-09T05:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* MKR */ Updated Common File Name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFG Files provide setting and control information to the client. &lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
[Header Option]&lt;br /&gt;
Setting=Boolean&lt;br /&gt;
&lt;br /&gt;
NOTE: Boolean = True or False in the form of a 0 (false) and 1 (true), so to enable a setting would be&lt;br /&gt;
Setting=1&lt;br /&gt;
And to disable it (setting it to false) would be&lt;br /&gt;
Setting=0&lt;br /&gt;
&lt;br /&gt;
A full list of options that can be added or specified nto the user.cfg file of the client is: &lt;br /&gt;
&lt;br /&gt;
[SwgClient]&lt;br /&gt;
allowMultipleInstances&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
&lt;br /&gt;
[ClientAnimation]&lt;br /&gt;
logPriorityHandling&lt;br /&gt;
disableCombatTrumping&lt;br /&gt;
&lt;br /&gt;
[ClientAudio]&lt;br /&gt;
Enabled&lt;br /&gt;
disableMiles&lt;br /&gt;
&lt;br /&gt;
[ClientDirectInput]&lt;br /&gt;
useJoySticks&lt;br /&gt;
useMouse&lt;br /&gt;
windowsKeyEnabledWhenWindowed&lt;br /&gt;
windowsKeyEnabledWhenFullscreen&lt;br /&gt;
enableForceFeedback&lt;br /&gt;
&lt;br /&gt;
[ClientGame]&lt;br /&gt;
disablePreloadAssetManager&lt;br /&gt;
disableLensFlares&lt;br /&gt;
fogDisable&lt;br /&gt;
debugPrint&lt;br /&gt;
allowDefaultTemplateParams&lt;br /&gt;
autoConnectToLoginServer&lt;br /&gt;
autoConnectToCentralServer&lt;br /&gt;
autoConnectToGameServer&lt;br /&gt;
nextAutoConnectToGameServer&lt;br /&gt;
autoQuitAfterLoadScreen&lt;br /&gt;
skipIntro&lt;br /&gt;
skipSplash&lt;br /&gt;
hudDisabled&lt;br /&gt;
cuiTest&lt;br /&gt;
cuiStringList&lt;br /&gt;
testFloor&lt;br /&gt;
useCustomInputMaps&lt;br /&gt;
worldSnapshotIgnorePobChanges&lt;br /&gt;
disableRemoteObjectInterpolation&lt;br /&gt;
disableCreatureTurningAnimation&lt;br /&gt;
ambientLightInCells&lt;br /&gt;
logCombatActionmessages&lt;br /&gt;
logCombatPlaybackSelection&lt;br /&gt;
logFireProjectileAction&lt;br /&gt;
logGrenadeLobAction&lt;br /&gt;
logTrailActions&lt;br /&gt;
logCloneWeaponAction&lt;br /&gt;
forceTrailsOnAllActions&lt;br /&gt;
disableCombatSpecialMoveEffects&lt;br /&gt;
logContainerProcessing&lt;br /&gt;
debugPortalCameraPathDragPlayer&lt;br /&gt;
invertMouse&lt;br /&gt;
showAttachmentsInFirstPerson&lt;br /&gt;
characterCreationLoadoutsEnabled&lt;br /&gt;
autoInviteReject&lt;br /&gt;
preloadWorldSnapshot&lt;br /&gt;
profanityFiltered&lt;br /&gt;
runWhenMoving&lt;br /&gt;
showClientRegionChanges&lt;br /&gt;
preloadPlayerMusicManager&lt;br /&gt;
useInteriorLayoutFiles&lt;br /&gt;
allowShootingDeadTarget&lt;br /&gt;
enablePostIncapDeathPostureChangeLockoutPeriod&lt;br /&gt;
0fd345d9&lt;br /&gt;
allowCustomerContact&lt;br /&gt;
anonymousCrashReports&lt;br /&gt;
enableChatLogging&lt;br /&gt;
disableVehicleRiderCombatAnimationState&lt;br /&gt;
shipAutoLevelDefault&lt;br /&gt;
validateShipParkingLocation&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
SplitMeshTestRandomizationEnable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/ClientInteriorLayoutManager]&lt;br /&gt;
logApplyInteriorLayoutCreates&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics/ShaderPrimitiveSetTemplate]&lt;br /&gt;
createCollisionDataForNonCollidablePrimitives&lt;br /&gt;
&lt;br /&gt;
[SharedFoundation]&lt;br /&gt;
windowed&lt;br /&gt;
noExceptionHandling&lt;br /&gt;
fpuExceptionPrecision&lt;br /&gt;
fpuExceptionUnderflow&lt;br /&gt;
fpuExceptionOverflow&lt;br /&gt;
fpuExceptionZeroDivide&lt;br /&gt;
fpuExceptionDenormal&lt;br /&gt;
fpuExceptionInvalid&lt;br /&gt;
demoMode&lt;br /&gt;
useRemoteDebug&lt;br /&gt;
profilerExpandAllBranches&lt;br /&gt;
memoryManagerReportAllocations&lt;br /&gt;
memorymanagerReportOnOutOfMemory&lt;br /&gt;
memoryManagerDebugDumpOnRemove&lt;br /&gt;
lookUpCallStackNames&lt;br /&gt;
verboseHardWareLogging&lt;br /&gt;
verboseWarnings&lt;br /&gt;
causeAccessViolation&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics]&lt;br /&gt;
windowed&lt;br /&gt;
borderlessWindow&lt;br /&gt;
validateShaderImplementations&lt;br /&gt;
screenShotBackbuffer&lt;br /&gt;
disableMultiStreamVertexBuffers&lt;br /&gt;
disableOcclusionCulling&lt;br /&gt;
nPatchTest&lt;br /&gt;
logBadCustomizationData&lt;br /&gt;
useHardwareMouseCusor&lt;br /&gt;
hardwareMouseCursorUseOriginalAlpha&lt;br /&gt;
constraintMouseCursorToWindow&lt;br /&gt;
enableLightScaling&lt;br /&gt;
loadAllAssetsRegardlessOfShaderCapability&lt;br /&gt;
loadGpa&lt;br /&gt;
&lt;br /&gt;
[ClientObject]&lt;br /&gt;
disableShadowVolumeStreamerDetector&lt;br /&gt;
forceLowDetailLevels&lt;br /&gt;
forceHighDetailLevels&lt;br /&gt;
preloadDetailLevels&lt;br /&gt;
detailAppearancesWithoutSprites&lt;br /&gt;
disableMeshTestShapes&lt;br /&gt;
renderShadows&lt;br /&gt;
meshShadows&lt;br /&gt;
crossFadeEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientObject/DetailAppearanceTemplate]&lt;br /&gt;
skipL0&lt;br /&gt;
&lt;br /&gt;
[ClientParticle]&lt;br /&gt;
disable&lt;br /&gt;
&lt;br /&gt;
[ClientSkeletalAnimation]&lt;br /&gt;
skipL0&lt;br /&gt;
logStateTraversal&lt;br /&gt;
logActionSelection&lt;br /&gt;
logAnimationLoading&lt;br /&gt;
logAnimationlookup&lt;br /&gt;
logSktCreateDestroy&lt;br /&gt;
logStringSelectorAnimation&lt;br /&gt;
renderplaybackScriptFeedback&lt;br /&gt;
allowSameTrackTrumping&lt;br /&gt;
logSameTrackTrumping&lt;br /&gt;
lodManagerEnable&lt;br /&gt;
skeletonSegementsanityCheckerEnabled&lt;br /&gt;
optimizeSkinnedIndexBuffers&lt;br /&gt;
disableBatcher&lt;br /&gt;
&lt;br /&gt;
[ClientTerrain]&lt;br /&gt;
warmCache&lt;br /&gt;
UseOcclusion&lt;br /&gt;
useClientServerProceduralTerrainAppearanceTemplate&lt;br /&gt;
useRealGeometryForOcclusion&lt;br /&gt;
terrainMultiThreaded&lt;br /&gt;
radialFloraSortFrontToBack&lt;br /&gt;
showChunkExtents&lt;br /&gt;
heightBiasDisabled&lt;br /&gt;
enableFlora&lt;br /&gt;
preloadGroups&lt;br /&gt;
disableTerrainClouds&lt;br /&gt;
disableTimeOfDay&lt;br /&gt;
useNormalizedTime&lt;br /&gt;
disableTerrainBlending&lt;br /&gt;
sharedGroupUseFirstChildOnly&lt;br /&gt;
disableClouds&lt;br /&gt;
enableLightScaling&lt;br /&gt;
dynamicFarFloraEnabled&lt;br /&gt;
dynamicNearFloraEnabled&lt;br /&gt;
staticNonCollidableFloraEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientTextureRenderer]&lt;br /&gt;
disableTextureBaking&lt;br /&gt;
&lt;br /&gt;
[ClientUserInterface]&lt;br /&gt;
chatBubblesEnabled&lt;br /&gt;
chatBubblesMinimized&lt;br /&gt;
chatBubbleEmotesEnabled&lt;br /&gt;
drawObjectNames&lt;br /&gt;
drawSelfName&lt;br /&gt;
allowRadialMenuPickup&lt;br /&gt;
allowTargetAnything&lt;br /&gt;
debugExamine&lt;br /&gt;
enableStartupBugReporting&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadself&lt;br /&gt;
autoJoinChatRoomOnCreate&lt;br /&gt;
alwaysSetMouseCursor&lt;br /&gt;
chatTimeStampEnabled&lt;br /&gt;
testGroupWithNpcs&lt;br /&gt;
testImageDesignWithNpcs&lt;br /&gt;
joystickMovesPointer&lt;br /&gt;
confirmObjDelete&lt;br /&gt;
groundRadarTerrainEnabled&lt;br /&gt;
settingsEnabled&lt;br /&gt;
netStatusEnabled&lt;br /&gt;
pointerModeMouseCameraEnabled&lt;br /&gt;
mouseModeDefault&lt;br /&gt;
turnStrafesDuringMouseModeToggle&lt;br /&gt;
modalChat&lt;br /&gt;
useNewbieTutorial&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
useExpMonitor&lt;br /&gt;
targetNothingUntargets&lt;br /&gt;
drawObjectNamesPlayers&lt;br /&gt;
drawObjectNamesGroup&lt;br /&gt;
drawObjectNamesNpcs&lt;br /&gt;
drawObjectNamesGuild&lt;br /&gt;
fatalOnBadKnowledgeBaseEntry&lt;br /&gt;
fatalOnBadPoiEntry&lt;br /&gt;
displayLoadingBoxes&lt;br /&gt;
confirmCrafting&lt;br /&gt;
showPopupHelp&lt;br /&gt;
showIconNames&lt;br /&gt;
useWaypointMonitor&lt;br /&gt;
showWayPointArrowsOnScreen&lt;br /&gt;
dropShadowUiEnabled&lt;br /&gt;
dropShadowObjectNamesEnabled&lt;br /&gt;
rotateInventoryObjects&lt;br /&gt;
showInterestingAppearance&lt;br /&gt;
showModifiersWindow&lt;br /&gt;
showAFKSpeech&lt;br /&gt;
showNPCSpeech&lt;br /&gt;
reticleSelect&lt;br /&gt;
autoSortInventoryContents&lt;br /&gt;
autoSortDataPadContents&lt;br /&gt;
joystickInverted&lt;br /&gt;
cockpitCameraRecenterOnShipMovement&lt;br /&gt;
&lt;br /&gt;
[SharedDebug/InstallTimer]&lt;br /&gt;
enabled&lt;br /&gt;
&lt;br /&gt;
[SharedFile]&lt;br /&gt;
enableAsynchronousLoader&lt;br /&gt;
validateIff&lt;br /&gt;
&lt;br /&gt;
[SharedDebug]&lt;br /&gt;
strict&lt;br /&gt;
&lt;br /&gt;
[SharedImage]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedIoWin]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedMath]&lt;br /&gt;
reportRangeLoopWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedObject]&lt;br /&gt;
allowDisabledPortals&lt;br /&gt;
validateCellContentsAttached&lt;br /&gt;
validateWorld&lt;br /&gt;
logCustomizationDataIssues&lt;br /&gt;
debugAlterChecking&lt;br /&gt;
containerLoopChecking&lt;br /&gt;
allowDisallowObjectDelete&lt;br /&gt;
&lt;br /&gt;
[SharedRandom]&lt;br /&gt;
Sample&lt;br /&gt;
&lt;br /&gt;
[SharedTerrain]&lt;br /&gt;
disableGetHeight&lt;br /&gt;
debugReportInstall&lt;br /&gt;
debugReportLogPrint&lt;br /&gt;
disableFloraCaching&lt;br /&gt;
&lt;br /&gt;
[SharedUtility]&lt;br /&gt;
disableFileCaching&lt;br /&gt;
logOptionmanager&lt;br /&gt;
&lt;br /&gt;
[SharedGame]&lt;br /&gt;
sample&lt;br /&gt;
debugStringIds&lt;br /&gt;
fatalOnBadFormData&lt;br /&gt;
spamAsteroidGenerationData&lt;br /&gt;
displayBadStringIds&lt;br /&gt;
imageDesignerVerboseOutput&lt;br /&gt;
&lt;br /&gt;
[SharedGame/Appearancemanager]&lt;br /&gt;
verboseWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedNetwork]&lt;br /&gt;
logAllNetworkTraffic&lt;br /&gt;
processOnSend&lt;br /&gt;
processIcmpErrors&lt;br /&gt;
reportMessages&lt;br /&gt;
enableFlushAndConfirmAllData&lt;br /&gt;
dataOnConnectionClosed&lt;br /&gt;
useNetowrkThread&lt;br /&gt;
allowPortRemapping&lt;br /&gt;
useTcp&lt;br /&gt;
reportUdpDisconnects&lt;br /&gt;
reportTcpDisconnects&lt;br /&gt;
logConnectionConstructionDestruction&lt;br /&gt;
logConnectionOpenclosed&lt;br /&gt;
logConnectionDeferredMessagesWarning&lt;br /&gt;
logSendngTooMuchData&lt;br /&gt;
networkHandlerDispatchThrottle&lt;br /&gt;
&lt;br /&gt;
[SharedLog]&lt;br /&gt;
logReportLogs&lt;br /&gt;
logReportWarnings&lt;br /&gt;
logReportFatals&lt;br /&gt;
logStderr&lt;br /&gt;
&lt;br /&gt;
[ClientBugReporting]&lt;br /&gt;
disableToolBugReports&lt;br /&gt;
&lt;br /&gt;
[SharedPathFinding]&lt;br /&gt;
autoCreateBuildingPathNods&lt;br /&gt;
useCityRegions&lt;br /&gt;
jitterCityWaypoints&lt;br /&gt;
enableDirtyBoxes&lt;br /&gt;
enablePathScrubber&lt;br /&gt;
&lt;br /&gt;
[SharedRegex]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[ClientGame/Bloom]&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/OverheadMap]&lt;br /&gt;
allowRotate&lt;br /&gt;
&lt;br /&gt;
[ClientProceduralTerrainAppearance_LevelOfDetail]&lt;br /&gt;
useHeightBias&lt;br /&gt;
&lt;br /&gt;
[CuiCombatManager]&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadSelf&lt;br /&gt;
&lt;br /&gt;
[CuiChatManager]&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
chatBoxTimestamp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR - Marker File==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH - Swoosh File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swoosh files create the effect trails on melee weapons, amongst other things.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/datatables/swoosh.iff&lt;br /&gt;
===&amp;gt; /appearance/&amp;lt;filename&amp;gt;.swh&lt;br /&gt;
======&amp;gt; /shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
======&amp;gt; /appearance/&amp;lt;filename&amp;gt;.prt (.PRT attachment is optional)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257300</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257300"/>
				<updated>2014-12-09T05:00:06Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* CFG - Configuration file */ Added ALL information. (Actually surprised this was missing.)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFG Files provide setting and control information to the client. &lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
[Header Option]&lt;br /&gt;
Setting=Boolean&lt;br /&gt;
&lt;br /&gt;
NOTE: Boolean = True or False in the form of a 0 (false) and 1 (true), so to enable a setting would be&lt;br /&gt;
Setting=1&lt;br /&gt;
And to disable it (setting it to false) would be&lt;br /&gt;
Setting=0&lt;br /&gt;
&lt;br /&gt;
A full list of options that can be added or specified nto the user.cfg file of the client is: &lt;br /&gt;
&lt;br /&gt;
[SwgClient]&lt;br /&gt;
allowMultipleInstances&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
&lt;br /&gt;
[ClientAnimation]&lt;br /&gt;
logPriorityHandling&lt;br /&gt;
disableCombatTrumping&lt;br /&gt;
&lt;br /&gt;
[ClientAudio]&lt;br /&gt;
Enabled&lt;br /&gt;
disableMiles&lt;br /&gt;
&lt;br /&gt;
[ClientDirectInput]&lt;br /&gt;
useJoySticks&lt;br /&gt;
useMouse&lt;br /&gt;
windowsKeyEnabledWhenWindowed&lt;br /&gt;
windowsKeyEnabledWhenFullscreen&lt;br /&gt;
enableForceFeedback&lt;br /&gt;
&lt;br /&gt;
[ClientGame]&lt;br /&gt;
disablePreloadAssetManager&lt;br /&gt;
disableLensFlares&lt;br /&gt;
fogDisable&lt;br /&gt;
debugPrint&lt;br /&gt;
allowDefaultTemplateParams&lt;br /&gt;
autoConnectToLoginServer&lt;br /&gt;
autoConnectToCentralServer&lt;br /&gt;
autoConnectToGameServer&lt;br /&gt;
nextAutoConnectToGameServer&lt;br /&gt;
autoQuitAfterLoadScreen&lt;br /&gt;
skipIntro&lt;br /&gt;
skipSplash&lt;br /&gt;
hudDisabled&lt;br /&gt;
cuiTest&lt;br /&gt;
cuiStringList&lt;br /&gt;
testFloor&lt;br /&gt;
useCustomInputMaps&lt;br /&gt;
worldSnapshotIgnorePobChanges&lt;br /&gt;
disableRemoteObjectInterpolation&lt;br /&gt;
disableCreatureTurningAnimation&lt;br /&gt;
ambientLightInCells&lt;br /&gt;
logCombatActionmessages&lt;br /&gt;
logCombatPlaybackSelection&lt;br /&gt;
logFireProjectileAction&lt;br /&gt;
logGrenadeLobAction&lt;br /&gt;
logTrailActions&lt;br /&gt;
logCloneWeaponAction&lt;br /&gt;
forceTrailsOnAllActions&lt;br /&gt;
disableCombatSpecialMoveEffects&lt;br /&gt;
logContainerProcessing&lt;br /&gt;
debugPortalCameraPathDragPlayer&lt;br /&gt;
invertMouse&lt;br /&gt;
showAttachmentsInFirstPerson&lt;br /&gt;
characterCreationLoadoutsEnabled&lt;br /&gt;
autoInviteReject&lt;br /&gt;
preloadWorldSnapshot&lt;br /&gt;
profanityFiltered&lt;br /&gt;
runWhenMoving&lt;br /&gt;
showClientRegionChanges&lt;br /&gt;
preloadPlayerMusicManager&lt;br /&gt;
useInteriorLayoutFiles&lt;br /&gt;
allowShootingDeadTarget&lt;br /&gt;
enablePostIncapDeathPostureChangeLockoutPeriod&lt;br /&gt;
0fd345d9&lt;br /&gt;
allowCustomerContact&lt;br /&gt;
anonymousCrashReports&lt;br /&gt;
enableChatLogging&lt;br /&gt;
disableVehicleRiderCombatAnimationState&lt;br /&gt;
shipAutoLevelDefault&lt;br /&gt;
validateShipParkingLocation&lt;br /&gt;
setJtlRetailIfBetaIsSet&lt;br /&gt;
SplitMeshTestRandomizationEnable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/ClientInteriorLayoutManager]&lt;br /&gt;
logApplyInteriorLayoutCreates&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics/ShaderPrimitiveSetTemplate]&lt;br /&gt;
createCollisionDataForNonCollidablePrimitives&lt;br /&gt;
&lt;br /&gt;
[SharedFoundation]&lt;br /&gt;
windowed&lt;br /&gt;
noExceptionHandling&lt;br /&gt;
fpuExceptionPrecision&lt;br /&gt;
fpuExceptionUnderflow&lt;br /&gt;
fpuExceptionOverflow&lt;br /&gt;
fpuExceptionZeroDivide&lt;br /&gt;
fpuExceptionDenormal&lt;br /&gt;
fpuExceptionInvalid&lt;br /&gt;
demoMode&lt;br /&gt;
useRemoteDebug&lt;br /&gt;
profilerExpandAllBranches&lt;br /&gt;
memoryManagerReportAllocations&lt;br /&gt;
memorymanagerReportOnOutOfMemory&lt;br /&gt;
memoryManagerDebugDumpOnRemove&lt;br /&gt;
lookUpCallStackNames&lt;br /&gt;
verboseHardWareLogging&lt;br /&gt;
verboseWarnings&lt;br /&gt;
causeAccessViolation&lt;br /&gt;
&lt;br /&gt;
[ClientGraphics]&lt;br /&gt;
windowed&lt;br /&gt;
borderlessWindow&lt;br /&gt;
validateShaderImplementations&lt;br /&gt;
screenShotBackbuffer&lt;br /&gt;
disableMultiStreamVertexBuffers&lt;br /&gt;
disableOcclusionCulling&lt;br /&gt;
nPatchTest&lt;br /&gt;
logBadCustomizationData&lt;br /&gt;
useHardwareMouseCusor&lt;br /&gt;
hardwareMouseCursorUseOriginalAlpha&lt;br /&gt;
constraintMouseCursorToWindow&lt;br /&gt;
enableLightScaling&lt;br /&gt;
loadAllAssetsRegardlessOfShaderCapability&lt;br /&gt;
loadGpa&lt;br /&gt;
&lt;br /&gt;
[ClientObject]&lt;br /&gt;
disableShadowVolumeStreamerDetector&lt;br /&gt;
forceLowDetailLevels&lt;br /&gt;
forceHighDetailLevels&lt;br /&gt;
preloadDetailLevels&lt;br /&gt;
detailAppearancesWithoutSprites&lt;br /&gt;
disableMeshTestShapes&lt;br /&gt;
renderShadows&lt;br /&gt;
meshShadows&lt;br /&gt;
crossFadeEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientObject/DetailAppearanceTemplate]&lt;br /&gt;
skipL0&lt;br /&gt;
&lt;br /&gt;
[ClientParticle]&lt;br /&gt;
disable&lt;br /&gt;
&lt;br /&gt;
[ClientSkeletalAnimation]&lt;br /&gt;
skipL0&lt;br /&gt;
logStateTraversal&lt;br /&gt;
logActionSelection&lt;br /&gt;
logAnimationLoading&lt;br /&gt;
logAnimationlookup&lt;br /&gt;
logSktCreateDestroy&lt;br /&gt;
logStringSelectorAnimation&lt;br /&gt;
renderplaybackScriptFeedback&lt;br /&gt;
allowSameTrackTrumping&lt;br /&gt;
logSameTrackTrumping&lt;br /&gt;
lodManagerEnable&lt;br /&gt;
skeletonSegementsanityCheckerEnabled&lt;br /&gt;
optimizeSkinnedIndexBuffers&lt;br /&gt;
disableBatcher&lt;br /&gt;
&lt;br /&gt;
[ClientTerrain]&lt;br /&gt;
warmCache&lt;br /&gt;
UseOcclusion&lt;br /&gt;
useClientServerProceduralTerrainAppearanceTemplate&lt;br /&gt;
useRealGeometryForOcclusion&lt;br /&gt;
terrainMultiThreaded&lt;br /&gt;
radialFloraSortFrontToBack&lt;br /&gt;
showChunkExtents&lt;br /&gt;
heightBiasDisabled&lt;br /&gt;
enableFlora&lt;br /&gt;
preloadGroups&lt;br /&gt;
disableTerrainClouds&lt;br /&gt;
disableTimeOfDay&lt;br /&gt;
useNormalizedTime&lt;br /&gt;
disableTerrainBlending&lt;br /&gt;
sharedGroupUseFirstChildOnly&lt;br /&gt;
disableClouds&lt;br /&gt;
enableLightScaling&lt;br /&gt;
dynamicFarFloraEnabled&lt;br /&gt;
dynamicNearFloraEnabled&lt;br /&gt;
staticNonCollidableFloraEnabled&lt;br /&gt;
&lt;br /&gt;
[ClientTextureRenderer]&lt;br /&gt;
disableTextureBaking&lt;br /&gt;
&lt;br /&gt;
[ClientUserInterface]&lt;br /&gt;
chatBubblesEnabled&lt;br /&gt;
chatBubblesMinimized&lt;br /&gt;
chatBubbleEmotesEnabled&lt;br /&gt;
drawObjectNames&lt;br /&gt;
drawSelfName&lt;br /&gt;
allowRadialMenuPickup&lt;br /&gt;
allowTargetAnything&lt;br /&gt;
debugExamine&lt;br /&gt;
enableStartupBugReporting&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadself&lt;br /&gt;
autoJoinChatRoomOnCreate&lt;br /&gt;
alwaysSetMouseCursor&lt;br /&gt;
chatTimeStampEnabled&lt;br /&gt;
testGroupWithNpcs&lt;br /&gt;
testImageDesignWithNpcs&lt;br /&gt;
joystickMovesPointer&lt;br /&gt;
confirmObjDelete&lt;br /&gt;
groundRadarTerrainEnabled&lt;br /&gt;
settingsEnabled&lt;br /&gt;
netStatusEnabled&lt;br /&gt;
pointerModeMouseCameraEnabled&lt;br /&gt;
mouseModeDefault&lt;br /&gt;
turnStrafesDuringMouseModeToggle&lt;br /&gt;
modalChat&lt;br /&gt;
useNewbieTutorial&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
useExpMonitor&lt;br /&gt;
targetNothingUntargets&lt;br /&gt;
drawObjectNamesPlayers&lt;br /&gt;
drawObjectNamesGroup&lt;br /&gt;
drawObjectNamesNpcs&lt;br /&gt;
drawObjectNamesGuild&lt;br /&gt;
fatalOnBadKnowledgeBaseEntry&lt;br /&gt;
fatalOnBadPoiEntry&lt;br /&gt;
displayLoadingBoxes&lt;br /&gt;
confirmCrafting&lt;br /&gt;
showPopupHelp&lt;br /&gt;
showIconNames&lt;br /&gt;
useWaypointMonitor&lt;br /&gt;
showWayPointArrowsOnScreen&lt;br /&gt;
dropShadowUiEnabled&lt;br /&gt;
dropShadowObjectNamesEnabled&lt;br /&gt;
rotateInventoryObjects&lt;br /&gt;
showInterestingAppearance&lt;br /&gt;
showModifiersWindow&lt;br /&gt;
showAFKSpeech&lt;br /&gt;
showNPCSpeech&lt;br /&gt;
reticleSelect&lt;br /&gt;
autoSortInventoryContents&lt;br /&gt;
autoSortDataPadContents&lt;br /&gt;
joystickInverted&lt;br /&gt;
cockpitCameraRecenterOnShipMovement&lt;br /&gt;
&lt;br /&gt;
[SharedDebug/InstallTimer]&lt;br /&gt;
enabled&lt;br /&gt;
&lt;br /&gt;
[SharedFile]&lt;br /&gt;
enableAsynchronousLoader&lt;br /&gt;
validateIff&lt;br /&gt;
&lt;br /&gt;
[SharedDebug]&lt;br /&gt;
strict&lt;br /&gt;
&lt;br /&gt;
[SharedImage]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedIoWin]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[SharedMath]&lt;br /&gt;
reportRangeLoopWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedObject]&lt;br /&gt;
allowDisabledPortals&lt;br /&gt;
validateCellContentsAttached&lt;br /&gt;
validateWorld&lt;br /&gt;
logCustomizationDataIssues&lt;br /&gt;
debugAlterChecking&lt;br /&gt;
containerLoopChecking&lt;br /&gt;
allowDisallowObjectDelete&lt;br /&gt;
&lt;br /&gt;
[SharedRandom]&lt;br /&gt;
Sample&lt;br /&gt;
&lt;br /&gt;
[SharedTerrain]&lt;br /&gt;
disableGetHeight&lt;br /&gt;
debugReportInstall&lt;br /&gt;
debugReportLogPrint&lt;br /&gt;
disableFloraCaching&lt;br /&gt;
&lt;br /&gt;
[SharedUtility]&lt;br /&gt;
disableFileCaching&lt;br /&gt;
logOptionmanager&lt;br /&gt;
&lt;br /&gt;
[SharedGame]&lt;br /&gt;
sample&lt;br /&gt;
debugStringIds&lt;br /&gt;
fatalOnBadFormData&lt;br /&gt;
spamAsteroidGenerationData&lt;br /&gt;
displayBadStringIds&lt;br /&gt;
imageDesignerVerboseOutput&lt;br /&gt;
&lt;br /&gt;
[SharedGame/Appearancemanager]&lt;br /&gt;
verboseWarnings&lt;br /&gt;
&lt;br /&gt;
[SharedNetwork]&lt;br /&gt;
logAllNetworkTraffic&lt;br /&gt;
processOnSend&lt;br /&gt;
processIcmpErrors&lt;br /&gt;
reportMessages&lt;br /&gt;
enableFlushAndConfirmAllData&lt;br /&gt;
dataOnConnectionClosed&lt;br /&gt;
useNetowrkThread&lt;br /&gt;
allowPortRemapping&lt;br /&gt;
useTcp&lt;br /&gt;
reportUdpDisconnects&lt;br /&gt;
reportTcpDisconnects&lt;br /&gt;
logConnectionConstructionDestruction&lt;br /&gt;
logConnectionOpenclosed&lt;br /&gt;
logConnectionDeferredMessagesWarning&lt;br /&gt;
logSendngTooMuchData&lt;br /&gt;
networkHandlerDispatchThrottle&lt;br /&gt;
&lt;br /&gt;
[SharedLog]&lt;br /&gt;
logReportLogs&lt;br /&gt;
logReportWarnings&lt;br /&gt;
logReportFatals&lt;br /&gt;
logStderr&lt;br /&gt;
&lt;br /&gt;
[ClientBugReporting]&lt;br /&gt;
disableToolBugReports&lt;br /&gt;
&lt;br /&gt;
[SharedPathFinding]&lt;br /&gt;
autoCreateBuildingPathNods&lt;br /&gt;
useCityRegions&lt;br /&gt;
jitterCityWaypoints&lt;br /&gt;
enableDirtyBoxes&lt;br /&gt;
enablePathScrubber&lt;br /&gt;
&lt;br /&gt;
[SharedRegex]&lt;br /&gt;
sample&lt;br /&gt;
&lt;br /&gt;
[ClientGame/Bloom]&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
[ClientGame/OverheadMap]&lt;br /&gt;
allowRotate&lt;br /&gt;
&lt;br /&gt;
[ClientProceduralTerrainAppearance_LevelOfDetail]&lt;br /&gt;
useHeightBias&lt;br /&gt;
&lt;br /&gt;
[CuiCombatManager]&lt;br /&gt;
showDamageOverHeadOthers&lt;br /&gt;
showDamageOverHeadSelf&lt;br /&gt;
&lt;br /&gt;
[CuiChatManager]&lt;br /&gt;
chatBoxKeyClick&lt;br /&gt;
chatBoxTimestamp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH - Swoosh File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swoosh files create the effect trails on melee weapons, amongst other things.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/datatables/swoosh.iff&lt;br /&gt;
===&amp;gt; /appearance/&amp;lt;filename&amp;gt;.swh&lt;br /&gt;
======&amp;gt; /shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
======&amp;gt; /appearance/&amp;lt;filename&amp;gt;.prt (.PRT attachment is optional)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257299</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257299"/>
				<updated>2014-12-09T04:55:30Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* SWH */ Added information and updated common name.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH - Swoosh File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swoosh files create the effect trails on melee weapons, amongst other things.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/datatables/swoosh.iff&lt;br /&gt;
===&amp;gt; /appearance/&amp;lt;filename&amp;gt;.swh&lt;br /&gt;
======&amp;gt; /shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
======&amp;gt; /appearance/&amp;lt;filename&amp;gt;.prt (.PRT attachment is optional)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257298</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257298"/>
				<updated>2014-12-09T04:54:23Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* SND - Sound File */ Added additional information and file chain structure.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound files link to audio files (Either .WAV or .MP3 format)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
===&amp;gt; /sample/&amp;lt;filename&amp;gt;.wav&lt;br /&gt;
or&lt;br /&gt;
===&amp;gt; /music/&amp;lt;filename&amp;gt;.mp3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257297</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257297"/>
				<updated>2014-12-09T04:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* SHT - shader */ Added Information and updated common name. C: Timbab.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''Shader File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shader files link to the Texture (.DDS), the Effect (.EFT), and when required, Palette's (.PAL)&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/shader/&amp;lt;filename&amp;gt;.sht&lt;br /&gt;
===&amp;gt; /texture/&amp;lt;filename&amp;gt;.dds&lt;br /&gt;
===&amp;gt; /effect/&amp;lt;filename&amp;gt;.eft&lt;br /&gt;
===&amp;gt; /palette/&amp;lt;filename&amp;gt;.pal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=User:Viaron&amp;diff=257296</id>
		<title>User:Viaron</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=User:Viaron&amp;diff=257296"/>
				<updated>2014-12-09T04:50:30Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''John Yoerger (Viaron)'''&lt;br /&gt;
&lt;br /&gt;
''SWG:ANH Staff''&lt;br /&gt;
&lt;br /&gt;
''Retired SWGEmu Quality Assurance''&lt;br /&gt;
&lt;br /&gt;
''Retired Project SWG Services Manager''&lt;br /&gt;
&lt;br /&gt;
[http://wiki.swganh.org/index.php/Special:Contributions/Viaron View My Wiki Contributions]&lt;br /&gt;
&lt;br /&gt;
Email: [mailto:jyoerger10@msn.com jyoerger10@msn.com]&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257295</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257295"/>
				<updated>2014-12-09T04:49:13Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* SND */ Added .SND File Common Name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''shader'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND - Sound File==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257294</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257294"/>
				<updated>2014-12-09T04:47:52Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* CEF - Client Effect file */ Added information on CEF files. C: Timbab.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client Effect Files are used to bundle Sound (.SND) and Particle Effect (.PRT) files together.&lt;br /&gt;
&lt;br /&gt;
File chain:&lt;br /&gt;
/clienteffect/&amp;lt;filename&amp;gt;.cef&lt;br /&gt;
/appearance/&amp;lt;filename&amp;gt;.prt&lt;br /&gt;
or&lt;br /&gt;
/sound/&amp;lt;filename&amp;gt;.snd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''shader'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257293</id>
		<title>TRE:TRE Breakdown</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=TRE:TRE_Breakdown&amp;diff=257293"/>
				<updated>2014-12-09T04:46:11Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: /* DDS - DirectDraw Surface File (Texture) */ Updated Links for Plugin tools and added additional information on file type.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:0; margin: 0.2em 10px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; padding:0px; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;line-height:120%; padding:0.4em; background-color:#eeeeee; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''SWGANH Tre Sub-Files Documentation'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;zborder-top:1px solid #aaaaaa;&amp;quot; width=&amp;quot;100% border-collapse: collapse;&amp;quot; cellpadding=0 cellspacing=0&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 0.2em;&amp;quot; width=&amp;quot;25%&amp;quot; | '''[[TreFiles History]]''' '''[[TreFile Template]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==ANS==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ANS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==APT - '''Appearance File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|APT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APT File Format links files to the .msh format either by directly going to the .msh filename or going to the .lod which then links to the .msh's&lt;br /&gt;
[code]&lt;br /&gt;
FORM -|&lt;br /&gt;
      |-APT FORM-|&lt;br /&gt;
                 |-0000Name&lt;br /&gt;
[/code]&lt;br /&gt;
Inside &amp;quot;0000Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Path to LOD/MSH&amp;quot;&amp;lt;Null Terminator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/lod/con_gen_organic_hide.lod&amp;lt;NULL&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
appearance/mesh/con_newbie_crate.msh&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ASH==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ASH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CDF - '''Client Data File'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CDF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file contains the items or objects are associated with another object.  &lt;br /&gt;
&lt;br /&gt;
Example: Spawning a Basic Camp from shared_scout_camp_s01.iff calls the &lt;br /&gt;
Client Data File shared_scout_camp_s01.cdf that contains the items that are spawned&lt;br /&gt;
automatically.  2 Torches, cot, stove, 2 pots, and the tent.  Any other items that are &lt;br /&gt;
needed will have to be spawn manually.  Normally these are items that the player can&lt;br /&gt;
interact with.  Example Chairs, terminals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CEF - '''Client Effect file'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CEF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CFG - '''Configuration file'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CFG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==CMP - '''Component File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|CMP ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:CMPA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Form:RADR (Optional)&lt;br /&gt;
                + Record:PART (One or more records)&lt;br /&gt;
                      # Filename of part mesh: null terminated ascii name. (Can reference .lod or .msh files.)&lt;br /&gt;
                      # 3x4 transform matrix - 12 32-bit float With index 3,7, and 11 being the x, y and z translation component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==[[TRE_DDSFileType|DDS - '''DirectDraw Surface File (Texture)''']]==&lt;br /&gt;
&lt;br /&gt;
'''DDS Plugin Downloads:'''&lt;br /&gt;
* [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop Plugin for Adobe Photoshop]&lt;br /&gt;
* [https://code.google.com/p/gimp-dds/ Plugin for GIMP]&lt;br /&gt;
&lt;br /&gt;
Read More: [http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx# MSDN Article on the DDS File Format]{{Box_TREformats|DDS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectDraw Surface File (texture)&lt;br /&gt;
&lt;br /&gt;
Notes for working with .DDS Files.&lt;br /&gt;
* Always use interpolated alpha when working with this file.&lt;br /&gt;
* Always save as a DXT5 Compression.&lt;br /&gt;
* .SHT files are the texture containers that link to all the 'textures' (Spec/Bump/Normal/Lookup/Main/etc) &lt;br /&gt;
and also palettes (2 palettes max per .SHT file).&lt;br /&gt;
* .SHT files use .EFT (HLSL containers) files for the actual shaders, so a link to them is also included.&lt;br /&gt;
* 'Tags' inside .SHT and .EFT files are shortened to 4 characters and are reversed, such as NIAM = Main, etc.&lt;br /&gt;
 A list of what most mean can be found here. Those are all the tags that exist in the files.&lt;br /&gt;
* .MGN/.MSH files are model files which will link to .SHT files (Middle to bottom of the file if opened with treExplorer),&lt;br /&gt;
 sometimes models have more than one texture, so if you can't find all, look there.&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==EFT - '''Effect'''==&lt;br /&gt;
[[Image:Eft.jpg]]&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|EFT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 - The first DATA record contains 2-bytes.  The first byte is an unsigned char that represents&lt;br /&gt;
the number of IMPL Forms in the file.  The 2nd byte is currently unknown.&lt;br /&gt;
&lt;br /&gt;
 - The PVSH form contains a record of 0000 which contains the full path of an HLSL vertex shader&lt;br /&gt;
program.&lt;br /&gt;
&lt;br /&gt;
 - The PPSH form contain a 0001 form which contains 1 DATA record and a variable number of PTXM&lt;br /&gt;
forms.  The DATA record is made up of 1 unsigned char (which indicates the number of PTXM records)&lt;br /&gt;
followed by the full path of an HLSL pixel shader program.&lt;br /&gt;
&lt;br /&gt;
 - Each PTXM form contains one 0002 record.  The first byte of which is an unsigned char followed&lt;br /&gt;
by a 4 char texture tag name.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FFE - '''Force Feedback File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FFE ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==FLR==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|FLR ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==IFF - '''Interchange Format File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|IFF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.szonye.com/bradd/iff.html - Overview of File Format&lt;br /&gt;
http://www.ibm.com/developerworks/power/library/pa-spec16/ - alternative Overview&lt;br /&gt;
&lt;br /&gt;
IFF Files are made up of Chunk(s). Each Chunk follows the format:&lt;br /&gt;
&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
(NOTE: Data lengths which are odd numbers are padded by a '0' which is not included in the Size (for 2 byte alignment) &lt;br /&gt;
however, SOE *seems* to have ignored this requirement)&lt;br /&gt;
&lt;br /&gt;
Chunks can contain other (child) Chunks, or even complete .IFF Files.&lt;br /&gt;
&lt;br /&gt;
IFF Files must start with types of either: 'FORM' (0x464F524D), 'LIST' (0x4C495354) or 'CAT ' (0x43415420).&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, IFF Files must have a single Root Chunk in the file to keep to the Standard,&lt;br /&gt;
however it is expected that Top Level Chunk may potentially co-exist in SOEs IFFs.&lt;br /&gt;
&lt;br /&gt;
It is currently believed that all SOE IFFs start with FORM (LIST and CAT not required).&lt;br /&gt;
&lt;br /&gt;
FORM Types are basically storage (Record) for other proprietary Chunks.&lt;br /&gt;
&lt;br /&gt;
Every SOE FORM has an additional 32bit Sub Type taking up offsets 8-11 ie:&lt;br /&gt;
Type (4 x Char)&lt;br /&gt;
Size (32 Bit Int Big-Endian)&lt;br /&gt;
Sub-Type (4x Char)&lt;br /&gt;
Data (Length determined by Size)&lt;br /&gt;
&lt;br /&gt;
This means, for SOE FORMs, the data starts at offset 12, and is Size-4 long.&lt;br /&gt;
&lt;br /&gt;
~ Known SOE Proprietary Chunks ~&lt;br /&gt;
CRCT - List of 32bit SOE CRCs, no delimeter&lt;br /&gt;
STNG - List of Strings, delimited by 0x00&lt;br /&gt;
DATA - Some sort of Value. In Lists it appears to be an item count&lt;br /&gt;
STRT - Hash Table IDs, 32bit, no delimeter&lt;br /&gt;
EMAP - List of 3 No. Strings, delimited by 0x00. Appear to be Event Related. &amp;quot;EventSource\0EventDestination\0ClientEffect&amp;quot;&lt;br /&gt;
0000 - List of Strings (generally Filenames), delimited by 0x00&lt;br /&gt;
&lt;br /&gt;
~ Example ~&lt;br /&gt;
An Example SOE .IFF (Misc\planet_crc_string_table.iff)&lt;br /&gt;
FORM (Length 524, Subtype CSTB [0x43535442])&lt;br /&gt;
*FORM (Length 512, Subtype 0000 [0x30303030])&lt;br /&gt;
**DATA (Length, 4)&lt;br /&gt;
**CRCT (Length 100)&lt;br /&gt;
**STRT (Length 100)&lt;br /&gt;
**STNG (Length 272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==ILF - '''Interior Layout File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|ILF ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
What is an ILF file?&lt;br /&gt;
&lt;br /&gt;
An Interior layout file or ILF is an SWG hexadecimal file that contains information on the position of objects relative to the selected interior space/cell. TREE has inbuilt functions to assist with these files, The ILF editor will open when the 'Edit File' button is clicked.&lt;br /&gt;
&lt;br /&gt;
The ILF editor has two panes, the navigation pane and the editing pane.&lt;br /&gt;
&lt;br /&gt;
The editing pane has 3 sections; the object information section, the coordinates section and the rotation section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opening an ILF&lt;br /&gt;
&lt;br /&gt;
An ILF can be opened through the use of the file pane when a TRE/TOC is loaded. If a TRE/TOC is not loaded, an external ILF can be loaded through the 'Open IFF/ILF/WS' dialog.&lt;br /&gt;
&lt;br /&gt;
Navigating an ILF's nodes&lt;br /&gt;
&lt;br /&gt;
TREE is developed to be user friendly and similar to the Windows Explorer interface, An ILF node can be navigated through the use of the keyboard or mouse.&lt;br /&gt;
&lt;br /&gt;
Mouse&lt;br /&gt;
&lt;br /&gt;
Clicking once on a FORM node will expand it, clicking on a sub-node will open it in the editing pane, in larger ILFs there may also be scroll bars at the side and bottom of the navigating pane. ILF nodes do not have drag and drop editing as the order of nodes does not matter.&lt;br /&gt;
&lt;br /&gt;
Keyboard&lt;br /&gt;
Using the left and right arrow keys on a FORM node will expand and collapse it respectively. Using the Up and down arrow keys will navigate through sub-nodes, pressing the left arrow key with a sub-node selected will cause the FORM node it is in to collapse.&lt;br /&gt;
&lt;br /&gt;
Adding an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be added through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Add Node' button located above the navigation pane.&lt;br /&gt;
&lt;br /&gt;
Deleting an ILF node&lt;br /&gt;
&lt;br /&gt;
ILF nodes may be removed through the use of a keyboard shortcut (Check article 'Shortcuts') or by using the 'Remove Node' button located above the navigation pane when a node is selected.&lt;br /&gt;
&lt;br /&gt;
Modifying an ILF node's Value&lt;br /&gt;
Object Information&lt;br /&gt;
This contains two editable values; Object and Cell.&lt;br /&gt;
The Object box is for the objects IFF's file path.&lt;br /&gt;
The Cell box is for the particular cell where the object will be placed inside an interior, a cell name can be found in game by pressing CTRL+SHIFT+G.&lt;br /&gt;
&lt;br /&gt;
Coordinates&lt;br /&gt;
The Coordinates section has three editable values; The X axis value, the Y axis value and the Z axis value. These control the position of the item relative to the cell/interior space.&lt;br /&gt;
&lt;br /&gt;
Rotation&lt;br /&gt;
The Rotation section contains 3 editable values; Pitch, Yaw and Roll. It also contains one button which will launch the matrix calculator.&lt;br /&gt;
&lt;br /&gt;
Saving an ILF&lt;br /&gt;
ILFs are normally saved under the SWG root in the interior layout file. For example C:\Program Files/StarWarsGalaxies/Interiorlayout/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==INC - '''Include File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|INC ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
possible relation to MAYA Lattices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LAY - '''Layer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LAY ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LMG==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LMG ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[FORM]   &lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[MLOD]&lt;br /&gt;
&lt;br /&gt;
[FORM]&lt;br /&gt;
[uint32]           //formsize&lt;br /&gt;
[0000]&lt;br /&gt;
&lt;br /&gt;
[INFO]&lt;br /&gt;
[uint32]           //infosize(2)&lt;br /&gt;
[uint16]           //name elements count&lt;br /&gt;
&lt;br /&gt;
[NAME]&lt;br /&gt;
[uint32]           //namesize&lt;br /&gt;
[namestring]       //0 terminated &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links to MGN meshes.&lt;br /&gt;
Basicly it applies level of detail to MGN's depending on how far away you are.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-MLODFORM-|&lt;br /&gt;
                |-0000INFO&lt;br /&gt;
                |-NAME&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0000INFO&lt;br /&gt;
&amp;lt;2 bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 Bytes represent how many NAME Forms there are, so if its 01 00, then there is 1 NAME form, if its 02 00 then there is 2, if its 0A then there is 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
File Path to the MGN with a NULL Terminator&lt;br /&gt;
&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/ackbar_l0.mgn&amp;lt;NULL&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LOD - '''level of detail'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|LOD ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
    * This overview will skip going into detail about the IFF format in general and focus purely on the organization of the LOD form.&lt;br /&gt;
    * If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
    * This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
    * NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
    * Form:DTLA&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form, but always seems to be 5,6 or 7)&lt;br /&gt;
                + Form:APPR (Same as one in mesh format.)&lt;br /&gt;
                + Record:PIVT&lt;br /&gt;
                      # Filename of ???: null terminated ascii name. (Always seems to be 1 byte of 0x0)&lt;br /&gt;
                + Record:INFO (Lists ranges for switch in/out of child models. The block of 3 values repeats, one for each child model. No.0/In/Out, No.1/In/Out, ... Number of child nodes is infoRecordSize/12)&lt;br /&gt;
                      # Child Number: 32-bit unsigned int.&lt;br /&gt;
                      # Switch in range: 32-bit float.&lt;br /&gt;
                      # Switch out range: 32-bit float.&lt;br /&gt;
                + Form:DATA&lt;br /&gt;
                      # Record:CHLD (One child per near/far value in INFO record. 1 or more )&lt;br /&gt;
                            * Child number: 32-bit unsigned int&lt;br /&gt;
                            * Filename of child model: null terminated ascii name. If the filename does not start with appearance/ then it must be added.&lt;br /&gt;
                + Form:RADR&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form:IDTL (0 or more)&lt;br /&gt;
                            * Record:VERT (Number of vertices is vertRecordSize/12.)&lt;br /&gt;
                                  o x: 32-bit float.&lt;br /&gt;
                                  o y: 32-bit float.&lt;br /&gt;
                                  o z: 32-bit float.&lt;br /&gt;
                            * Record:INDX (List of indices defining triangles using the vertices from the VERT record. Number of indices is indxRecordSize/4.)&lt;br /&gt;
                                  o index: 32-bit unsigned.&lt;br /&gt;
                + Form:TEST&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
                + Form:WRIT&lt;br /&gt;
                      # Record:INFO&lt;br /&gt;
                            * Num IDTL forms: 32-bit unsigned int&lt;br /&gt;
                      # Form: IDTL (0 or more)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==LSB==&lt;br /&gt;
&lt;br /&gt;
LSB? File&lt;br /&gt;
&lt;br /&gt;
==LTN==&lt;br /&gt;
&lt;br /&gt;
LTN? File Something to do with lighting&lt;br /&gt;
&lt;br /&gt;
==MGN==&lt;br /&gt;
&lt;br /&gt;
MGN? File 3d model information&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MGN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==MKR==&lt;br /&gt;
&lt;br /&gt;
Marker File&lt;br /&gt;
&lt;br /&gt;
==MP3==&lt;br /&gt;
&lt;br /&gt;
MP3 Audio File&lt;br /&gt;
&lt;br /&gt;
==MSH - '''mesh'''==&lt;br /&gt;
{{Box_TREformats|MSH ''file breakdown''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This file, like most SWG files, is based on the IFF format.&lt;br /&gt;
This overview will skip going into detail about the IFF format in general and focus purely on the organization of the MESH form.&lt;br /&gt;
If a Form/Record appears multiple times I will only define it the first time, unless its structure differs.&lt;br /&gt;
This file format is still being explored, so take this information as a guide and realize that some assumptions made here may be incorrect or missing details.&lt;br /&gt;
If you discover something I missed or have an error correction, please send a message Xunil on the swgemu forums.&lt;br /&gt;
NOTE: All values are little-endian, unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
Form:MESH&lt;br /&gt;
Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
Form:APPR&lt;br /&gt;
Form:0003&lt;br /&gt;
Form:EXBX (Bounding box) 1 or more required.&lt;br /&gt;
Form:0001&lt;br /&gt;
Form:EXSP (Bounding sphere.)&lt;br /&gt;
Form:0001&lt;br /&gt;
Record:SPHR&lt;br /&gt;
Record:BOX&lt;br /&gt;
Form:NULL&lt;br /&gt;
Form:EXSP (Optional additional Bounding sphere. Same format as previous.)&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:0000&lt;br /&gt;
Record:CYLN&lt;br /&gt;
Form:CMPT&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CPST&lt;br /&gt;
Form:0000&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:CMPT (Coming soon.)&lt;br /&gt;
Form:EXBX&lt;br /&gt;
Form:EXSP&lt;br /&gt;
Form:XCYL&lt;br /&gt;
Form:CMSH (Coming soon.)&lt;br /&gt;
Form:DTAL (Coming soon.)&lt;br /&gt;
Form:HPTS (List of 0 or more attach point records.)&lt;br /&gt;
Record:HPNT&lt;br /&gt;
Form:FLOR&lt;br /&gt;
Form:DATA&lt;br /&gt;
Size of floor filename(including NULL): unsigned char&lt;br /&gt;
Floor filename - null terminated ascii string.&lt;br /&gt;
Form:INFO (Not sure yet.)&lt;br /&gt;
Form:SPS&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:CNT&lt;br /&gt;
numGeode - 32-bit unsigned int.&lt;br /&gt;
Form:000# (In this case the # is the number of this geometry subtree)&lt;br /&gt;
Record:NAME&lt;br /&gt;
Shader Filename - NULL terminated ascii string.&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(num geometry forms?) - 32-bit unsigned int.&lt;br /&gt;
Form:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown - 32-bit unsigned int.&lt;br /&gt;
Unknown - 16-bit unsigned short.&lt;br /&gt;
FORM:VTXA&lt;br /&gt;
FORM:000#&lt;br /&gt;
Record:INFO&lt;br /&gt;
Unknown(FVF flags?) - 32-bit unsigned int.&lt;br /&gt;
numVertices - 32-bit unsigned short.&lt;br /&gt;
Record:DATA&lt;br /&gt;
Vertex Data&lt;br /&gt;
Record:INDX&lt;br /&gt;
Vertex indices&lt;br /&gt;
Record:SIDX (Optional)&lt;br /&gt;
Secondary vertex indices&lt;br /&gt;
Record:SPHR - Defines a sphere.&lt;br /&gt;
Sphere center xyz - 3 32-bit float.&lt;br /&gt;
Sphere radius - 32-bit float.&lt;br /&gt;
Record:BOX - Defines a box.&lt;br /&gt;
First corner xyz - 3 32-bit float.&lt;br /&gt;
Second corner xyz - 3 32-bit float.&lt;br /&gt;
Record:CYLN - Defines a cylinder.&lt;br /&gt;
Base xyz, radius, height?- 5 32-bit float.&lt;br /&gt;
Record:HPNT - Attach point.&lt;br /&gt;
3 row x 4 col transform matrix - 12 32-bit float.&lt;br /&gt;
Null terminated ascii name - remainder of HPNT record size.&lt;br /&gt;
Vertex data&lt;br /&gt;
Before reading the vertex data the bytes per vertex needs to be computed.&lt;br /&gt;
BPV = (vertex DATA record size)/numVertices.&lt;br /&gt;
The observed vertex formats seen are as follows:&lt;br /&gt;
32 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
36 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
40 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
44 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
48 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
52 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
56 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
60 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
64 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
68 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
color argb - 4 unsigned char.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
72 bpv&lt;br /&gt;
position xyz - 3 32-bit floats.&lt;br /&gt;
normal xyz - 3 32-bit floats.&lt;br /&gt;
tex coords 0 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 1 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 2 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 3 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 4 uv - 2 32-bit floats.&lt;br /&gt;
tex coords 5 uv - 2 32-bit floats.&lt;br /&gt;
Vertex index&lt;br /&gt;
Before reading the vertex indices the bytes per index needs to be computed.&lt;br /&gt;
BPI = (INDX record size - 4)/numIndices.&lt;br /&gt;
After the bpi is computed, the rest of the record is a series of unsigned short or unsigned int values that reference the vertices defined in the vertex DATA record.&lt;br /&gt;
So index 0,1,2 = triangle 0, index 3,4,5 = triangle 1, ...&lt;br /&gt;
&lt;br /&gt;
Secondary Vertex index&lt;br /&gt;
Number of matrix/index/triangle sets: 32-bit unsigned int.&lt;br /&gt;
Matrix/index/triangle set.&lt;br /&gt;
Rotations? - 3 32-bit floats.&lt;br /&gt;
Number of indices: - 32-bit unsigned int.&lt;br /&gt;
Index: Same datatype as primary vertex index.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|MSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rollout SWG_roll &amp;quot;Model importer&amp;quot; (&lt;br /&gt;
fn readInvLong f = (&lt;br /&gt;
  t1 = readbyte f #unsigned&lt;br /&gt;
  t2 = readbyte f #unsigned&lt;br /&gt;
  t3 = readbyte f #unsigned&lt;br /&gt;
  t4 = readbyte f #unsigned&lt;br /&gt;
  return (t4+t3*0x100+t2*0x10000+t1*0x1000000)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readFORM f = (&lt;br /&gt;
  ofsForm = readInvLong f&lt;br /&gt;
  hdr = readlong f&lt;br /&gt;
  return hdr&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPoint3 f sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT3Ary = #()&lt;br /&gt;
  testbyte = readlong f&lt;br /&gt;
  fseek f -4 #seek_cur&lt;br /&gt;
  if (testbyte&amp;lt;65536)AND(testbyte&amp;gt;=0) then (&lt;br /&gt;
   for i = 1 to (datasize/16) do (&lt;br /&gt;
    idx = 1 + (readlong f)&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    PT3Ary[idx] = [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
   for i = 1 to PT3Ary.count do&lt;br /&gt;
    if PT3Ary[i] == undefined then PT3Ary[i] = [0,0,0]&lt;br /&gt;
  ) else (&lt;br /&gt;
   for i = 1 to (datasize/12) do (&lt;br /&gt;
    vx = (readfloat f) * sc&lt;br /&gt;
    vy = (readfloat f) * sc&lt;br /&gt;
    vz = (readfloat f) * sc&lt;br /&gt;
    append PT3Ary [vx,-vz,vy]   &lt;br /&gt;
   )&lt;br /&gt;
  )&lt;br /&gt;
  return PT3Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readTCSD f = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  PT2Ary = #()&lt;br /&gt;
  for i = 1 to (datasize/8) do (&lt;br /&gt;
   vx = readfloat f&lt;br /&gt;
   vy = 1- (readfloat f)&lt;br /&gt;
   append PT2Ary [vx,vy,0]   &lt;br /&gt;
  )&lt;br /&gt;
  return PT2Ary&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readPIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  for i = 1 to numIndex do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readNIDX f = (&lt;br /&gt;
  IndexAry = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  for i = 1 to (datasize/4) do append IndexAry (1+(readlong f))&lt;br /&gt;
  return IndexAry&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readOITL f = (&lt;br /&gt;
  IdxAry = #()&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   append IdxAry (1+(readshort f))&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(IdxAry,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn readITL f = (&lt;br /&gt;
  Int3Ary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numdata = readlong f&lt;br /&gt;
  for i = 1 to numdata do (&lt;br /&gt;
   f1 = 1 + (readlong f)&lt;br /&gt;
   f2 = 1 + (readlong f)&lt;br /&gt;
   f3 = 1 + (readlong f)&lt;br /&gt;
   append Int3Ary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return #(undefined,Int3Ary)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
fn buildmesh VTary FCary NLary UVary PIDXary NIDXary = (&lt;br /&gt;
  for i = 1 to PIDXary.count do PIDXary[i] = VTary[(PIDXary[i])]&lt;br /&gt;
  for i = 1 to NIDXary.count do NIDXary[i] = NLary[(NIDXary[i])]&lt;br /&gt;
  if FCary[1] == undefined then  msh = mesh vertices:PIDXary faces:FCary[2]&lt;br /&gt;
  else msh = mesh vertices:PIDXary faces:FCary[2] materialIDs:FCary[1]&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary[2].count do setTVFace msh j FCary[2][j]&lt;br /&gt;
  for j = 1 to NIDXary.count do setNormal msh j NIDXary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
  ----------------------------------------------------------------------------&lt;br /&gt;
fn readDATA f numData sc = (&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  if datasize &amp;lt; 8 then (&lt;br /&gt;
   fseek f datasize #seek_cur&lt;br /&gt;
   return undefined&lt;br /&gt;
  )&lt;br /&gt;
  VTary = #()&lt;br /&gt;
  NLary = #()&lt;br /&gt;
  UVary = #()&lt;br /&gt;
  sizeElement = datasize/numData&lt;br /&gt;
  --format &amp;quot;V:% @[%]\n&amp;quot; sizeElement (ftell f)&lt;br /&gt;
  for i = 1 to numData do (&lt;br /&gt;
   vx = (readfloat f)*sc;    vy = (readfloat f)*sc;    vz = (readfloat f)*sc&lt;br /&gt;
   nx = readfloat f;    ny = readfloat f;    nz = readfloat f&lt;br /&gt;
   --&lt;br /&gt;
   byteRead = 32&lt;br /&gt;
   case sizeElement of (&lt;br /&gt;
    36: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    52: ( readlong f ; byteRead = 36 )&lt;br /&gt;
    56: ( fseek f 16 #seek_cur ; byteRead = 48 )&lt;br /&gt;
    default: byteRead = 32&lt;br /&gt;
   )&lt;br /&gt;
   vu = readfloat f;    vv = 1-(readfloat f)&lt;br /&gt;
   fseek f (sizeElement-byteRead) #seek_cur&lt;br /&gt;
   --&lt;br /&gt;
   append VTary [vx,-vz,vy]&lt;br /&gt;
   append NLary [nx,-nz,ny]&lt;br /&gt;
   append UVary [vu,vv,0]&lt;br /&gt;
  )&lt;br /&gt;
  return #(VTary,NLary,UVary)&lt;br /&gt;
)&lt;br /&gt;
fn readINDX f = (&lt;br /&gt;
  FCary = #()&lt;br /&gt;
  datasize = readInvLong f&lt;br /&gt;
  numIndex = readlong f&lt;br /&gt;
  sizeElement = datasize / numIndex&lt;br /&gt;
  for i = 1 to (numIndex/3) do (&lt;br /&gt;
   if sizeElement == 2 then (&lt;br /&gt;
    f1 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f2 = 1 + (readshort f #unsigned)&lt;br /&gt;
    f3 = 1 + (readshort f #unsigned)&lt;br /&gt;
   ) else if sizeElement == 4 then (&lt;br /&gt;
    f1 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f2 = 1 + (readlong f #unsigned)&lt;br /&gt;
    f3 = 1 + (readlong f #unsigned)&lt;br /&gt;
   ) else messagebox &amp;quot;error in face index&amp;quot;&lt;br /&gt;
   append FCary [f1,f2,f3]&lt;br /&gt;
  )&lt;br /&gt;
  return FCary&lt;br /&gt;
)&lt;br /&gt;
fn buildmesh2 VTary FCary NLary UVary = (&lt;br /&gt;
  msh = mesh vertices:VTary faces:FCary&lt;br /&gt;
  msh.numTVerts = UVary.count&lt;br /&gt;
  buildTVFaces msh&lt;br /&gt;
  for j = 1 to UVary.count do setTVert  msh j UVary[j]&lt;br /&gt;
  for j = 1 to FCary.count do setTVFace msh j FCary[j]&lt;br /&gt;
  for j = 1 to NLary.count do setNormal msh j NLary[j]&lt;br /&gt;
  return msh&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
--GUI--&lt;br /&gt;
spinner fscale &amp;quot;Scale : &amp;quot; fieldwidth:60 range:[0.001, 1000, 1]&lt;br /&gt;
button impMGN &amp;quot;Import   MGN / MSH&amp;quot; width:150 Height:25 align:#center&lt;br /&gt;
label lbl1 &amp;quot;&amp;quot;&lt;br /&gt;
label lbl2 &amp;quot;by Fatduck&amp;quot; align:#right&lt;br /&gt;
&lt;br /&gt;
on impMGN pressed do (&lt;br /&gt;
  fname = getOpenFileName caption:&amp;quot;Select Star Wars Galaxies Model file&amp;quot; types:&amp;quot;MGN File (*.mgn)|*.mgn|MSH File (*.msh)|*.msh|All Files (*.*)|*.*|&amp;quot;&lt;br /&gt;
  if fname != undefined then (&lt;br /&gt;
   f = fopen fname &amp;quot;rb&amp;quot;&lt;br /&gt;
   fseek f 0 #seek_end&lt;br /&gt;
   ofsEOF = ftell f&lt;br /&gt;
   fseek f 0 #seek_set&lt;br /&gt;
   VTary = #()&lt;br /&gt;
   UVary = #()&lt;br /&gt;
   NLary = #()&lt;br /&gt;
   FCary = #()&lt;br /&gt;
   PIDXary = #()&lt;br /&gt;
   NIDXary = #()&lt;br /&gt;
   meshFlag = undefined&lt;br /&gt;
   infoFlag = undefined&lt;br /&gt;
   mshVert = 0&lt;br /&gt;
   do (&lt;br /&gt;
    header = readlong f&lt;br /&gt;
    case header of (&lt;br /&gt;
     0x58444E49:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readINDX f&lt;br /&gt;
        msh = buildmesh2 VTary FCary NLary UVary&lt;br /&gt;
       )&lt;br /&gt;
     0x41544144:&lt;br /&gt;
       (&lt;br /&gt;
        rslt = readDATA f mshVert fscale.value&lt;br /&gt;
        if rslt != undefined then (&lt;br /&gt;
         VTary = rslt[1]&lt;br /&gt;
         NLary = rslt[2]&lt;br /&gt;
         UVary = rslt[3]&lt;br /&gt;
        )&lt;br /&gt;
        infoFlag = false&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F46:&lt;br /&gt;
       (&lt;br /&gt;
        flg = readFORM f&lt;br /&gt;
        if flg == 0x474D4B53 then meshFlag = true --SKMG&lt;br /&gt;
        else if flg == 0x20544C42 then meshFlag = false --BLT&lt;br /&gt;
        if flg == 0x41585456 then infoFlag = true --VTXA&lt;br /&gt;
       )   &lt;br /&gt;
     0x4F464E49:&lt;br /&gt;
       (&lt;br /&gt;
        if infoFlag == true then (&lt;br /&gt;
         fseek f 8 #seek_cur&lt;br /&gt;
         mshVert = readlong f&lt;br /&gt;
        ) else fseek f (readInvLong f) #seek_cur&lt;br /&gt;
       ) &lt;br /&gt;
     0x4E534F50:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then VTary = readPoint3 f fscale.value&lt;br /&gt;
        else readPoint3 f fscale.value&lt;br /&gt;
       )&lt;br /&gt;
     0x4D524F4E:&lt;br /&gt;
       (&lt;br /&gt;
        if meshFlag == true then NLary = readPoint3 f 1&lt;br /&gt;
        else readPoint3 f 1&lt;br /&gt;
       )&lt;br /&gt;
     0x58444950: PIDXary = readPIDX f&lt;br /&gt;
     0x5844494E: NIDXary = readNIDX f&lt;br /&gt;
     0x44534354: UVary = readTCSD f&lt;br /&gt;
     0x4C54494F:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readOITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     0x204C5449:&lt;br /&gt;
       (&lt;br /&gt;
        FCary = readITL f&lt;br /&gt;
        msh = buildmesh VTary FCary NLary UVary PIDXary NIDXary&lt;br /&gt;
       )&lt;br /&gt;
     default:&lt;br /&gt;
       (&lt;br /&gt;
        datasize = readInvLong f&lt;br /&gt;
        fseek f datasize #seek_cur&lt;br /&gt;
       )&lt;br /&gt;
    )--end case&lt;br /&gt;
   ) while (ftell f) != ofsEOF&lt;br /&gt;
   fclose f&lt;br /&gt;
  )--end if fname&lt;br /&gt;
)--end on impMGN&lt;br /&gt;
&lt;br /&gt;
)--end rollout SWG_roll&lt;br /&gt;
&lt;br /&gt;
if Fatduck_SWG != undefined then closeRolloutFloater Fatduck_SWG&lt;br /&gt;
Fatduck_SWG = newRolloutFloater &amp;quot;Star Wars Galaxies&amp;quot; 200 175 10 70&lt;br /&gt;
addRollout SWG_roll Fatduck_SWG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PAL - '''palette'''==&lt;br /&gt;
&lt;br /&gt;
Palette File&lt;br /&gt;
&lt;br /&gt;
PAL Editor can be downloaded here -&amp;gt; http://mods.mandalorians.de/system/infusions/pro_download_panel/download.php?did=16&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|PAL ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 49 46 46  // RIFF&lt;br /&gt;
&lt;br /&gt;
10 01 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
50 40 4c 20  // Pal&lt;br /&gt;
&lt;br /&gt;
64 61 74 61  // Data&lt;br /&gt;
&lt;br /&gt;
40 00 00 00  // size (int 32)&lt;br /&gt;
&lt;br /&gt;
// Here starts the color pallate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 03  // uint16 version&lt;br /&gt;
&lt;br /&gt;
40 00  // uint16 pallette colors count(64)&lt;br /&gt;
&lt;br /&gt;
// This is were the swg pallet editor start's showing were the colors are&lt;br /&gt;
&lt;br /&gt;
cc cc cc 00   // uint32 (RGBA)&lt;br /&gt;
&lt;br /&gt;
b7 b7 b7 00 //&lt;br /&gt;
&lt;br /&gt;
a3 a3 a3 00  //&lt;br /&gt;
&lt;br /&gt;
8e 8e 8e 00  //&lt;br /&gt;
&lt;br /&gt;
92 23 23 00  //&lt;br /&gt;
&lt;br /&gt;
84 1f 1f 00  //&lt;br /&gt;
&lt;br /&gt;
77 1b 1b 00 //&lt;br /&gt;
&lt;br /&gt;
69 17 17 00 //&lt;br /&gt;
&lt;br /&gt;
65 61 82 00 //&lt;br /&gt;
&lt;br /&gt;
54 50 85 00 //&lt;br /&gt;
&lt;br /&gt;
44 3e 89 00 //&lt;br /&gt;
&lt;br /&gt;
33 2d 8c 00  //&lt;br /&gt;
&lt;br /&gt;
d4 d6 47 00 //&lt;br /&gt;
&lt;br /&gt;
b8 ba 36 00  //&lt;br /&gt;
&lt;br /&gt;
9d 9f 26 00  //&lt;br /&gt;
&lt;br /&gt;
81 83 15 00  //&lt;br /&gt;
&lt;br /&gt;
58 a5 64 00  //&lt;br /&gt;
&lt;br /&gt;
45 91 51 00  //&lt;br /&gt;
&lt;br /&gt;
31 7c 3d 00  //&lt;br /&gt;
&lt;br /&gt;
df b4 3e 00 //&lt;br /&gt;
&lt;br /&gt;
b9 94 2f 00  //&lt;br /&gt;
&lt;br /&gt;
92 73 1f 00 //&lt;br /&gt;
&lt;br /&gt;
6c 53 10 00  //&lt;br /&gt;
&lt;br /&gt;
71 a5 a5 00  //&lt;br /&gt;
&lt;br /&gt;
5b 95 95 00  //&lt;br /&gt;
&lt;br /&gt;
44 86 86 00  //&lt;br /&gt;
&lt;br /&gt;
2e 76 76 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
72 4d 78 00 //&lt;br /&gt;
&lt;br /&gt;
6e 38 7b 00  //&lt;br /&gt;
&lt;br /&gt;
6b 24 7d 00 //&lt;br /&gt;
&lt;br /&gt;
7d b0 c0 00 //&lt;br /&gt;
&lt;br /&gt;
69 95 a3 00 //&lt;br /&gt;
&lt;br /&gt;
54 7b 87 00 //&lt;br /&gt;
&lt;br /&gt;
40 60 6a 00 //&lt;br /&gt;
&lt;br /&gt;
cd 7a 37 00  //&lt;br /&gt;
&lt;br /&gt;
a9 64 2c 00 //&lt;br /&gt;
&lt;br /&gt;
84 4d 21 00  //&lt;br /&gt;
&lt;br /&gt;
60 37 16 00  //&lt;br /&gt;
&lt;br /&gt;
d4 83 83 00 //&lt;br /&gt;
&lt;br /&gt;
a5 5e 5e 00  //&lt;br /&gt;
&lt;br /&gt;
87 42 42 00  //&lt;br /&gt;
&lt;br /&gt;
5f 2d 2d 00  //&lt;br /&gt;
&lt;br /&gt;
93 73 1b 00 //&lt;br /&gt;
&lt;br /&gt;
7c 60 18 00  //&lt;br /&gt;
&lt;br /&gt;
5a 45 0e 00  //&lt;br /&gt;
&lt;br /&gt;
dd d8 c0 00 //&lt;br /&gt;
&lt;br /&gt;
bd b9 a4 00  //&lt;br /&gt;
&lt;br /&gt;
9e 9a 88 00  //&lt;br /&gt;
&lt;br /&gt;
7e 7b 6c 00  //&lt;br /&gt;
&lt;br /&gt;
91 6d 6d 00  //&lt;br /&gt;
&lt;br /&gt;
76 59 59 00  //&lt;br /&gt;
&lt;br /&gt;
5c 44 44 00 //&lt;br /&gt;
&lt;br /&gt;
41 30 30 00  //&lt;br /&gt;
&lt;br /&gt;
75 61 76 00  //&lt;br /&gt;
&lt;br /&gt;
6b 4d 6c 00  //&lt;br /&gt;
&lt;br /&gt;
60 39 62 00  //&lt;br /&gt;
&lt;br /&gt;
56 25 58 00 //&lt;br /&gt;
&lt;br /&gt;
a6 c1 71 00  //&lt;br /&gt;
&lt;br /&gt;
8e a6 61 00  //&lt;br /&gt;
&lt;br /&gt;
77 8a 50 00  //&lt;br /&gt;
&lt;br /&gt;
5f 6f 40 00  //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==PLN==&lt;br /&gt;
&lt;br /&gt;
Planet File&lt;br /&gt;
&lt;br /&gt;
==POB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
46 4f 52 4d             // FORM&lt;br /&gt;
00 00 02 d3             // 723 Form Count&lt;br /&gt;
43 45 4c 4c 46 4f 52 4d // CELLFORM&lt;br /&gt;
00 00 02 c7             // 711 count to end of form&lt;br /&gt;
30 30 30 35 44 41 54 41 // 0005DATA&lt;br /&gt;
00 00 00 a9 &lt;br /&gt;
04 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
6d 61 69 6e 68 61 6e 67 61 72 // mainhangar&lt;br /&gt;
00&lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65 2f 6d 65 73 68 2f  // appearance/mesh/&lt;br /&gt;
74 68 6d 5f 73 70 63 5f 73 74 61 72 5f 64 65 73  // thm_spc_star_des&lt;br /&gt;
74 72 6f 79 65 72 5f 73 30 31 5f 72 31 5f 6d 61  // troyer_s01_r1_ma&lt;br /&gt;
69 6e 68 61 6e 67 61 72 5f 6d 65 73 68 5f 72 31  // inhangar_mesh_r1&lt;br /&gt;
2e 6d 73 68                                      // .msh&lt;br /&gt;
00 01 &lt;br /&gt;
61 70 70 65 61 72 61 6e 63 65                    // appearance&lt;br /&gt;
2f 63 6f 6c 6c 69 73 69 6f 6e 2f 74 68 6d 5f 73  // /collision/thm_s&lt;br /&gt;
70 63 5f 73 74 61 72 5f 64 65 73 74 72 6f 79 65  // pc_star_destroye&lt;br /&gt;
72 5f 73 30 31 5f 72 31 5f 6d 61 69 6e 68 61 6e  // r_s01_r1_mainhan&lt;br /&gt;
67 61 72 5f 63 6f 6c 6c 69 73 69 6f 6e 5f 66 6c  // gar_collision_fl&lt;br /&gt;
6f 6f 72 30 2e 66 6c 72                          // oor0.flr&lt;br /&gt;
00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 04 &lt;br /&gt;
4e 55 4c 4c 46 4f 52 4d    // NULLFORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 02 00 00 &lt;br /&gt;
00 01 0c 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FROM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 03 00 00 &lt;br /&gt;
00 01 0a 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 04 00 00 &lt;br /&gt;
00 01 09 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 &lt;br /&gt;
48 50 52 54 4c 30 30 30 34 // HPRTL0004&lt;br /&gt;
00 00 00 3c &lt;br /&gt;
01 05 00 00 &lt;br /&gt;
00 01 02 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 80 3f // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
4c 47 48 54               // LGHT&lt;br /&gt;
00 00 00 be  // 190&lt;br /&gt;
02 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 45 b3 3f   // 1.40   R Lighting Color&lt;br /&gt;
0a d7 b3 3f   // 1.40   B Lighting Color&lt;br /&gt;
fe cf a5 3f   // 1.30   G Lighting Color&lt;br /&gt;
00 00 80 3f   // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
11 12 61 3f  //  0.88&lt;br /&gt;
78 a0 51 43  //  209.63&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
11 12 61 bf  //  0.88&lt;br /&gt;
00 f6 f3 be  // -0.48&lt;br /&gt;
67 08 a8 c2  // -84.02&lt;br /&gt;
00 00 80 3f  //  1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
01 00 00 00 &lt;br /&gt;
00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color Like sun light but only shows on toon&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
d5 3e 97 3f  // 1.18   R Lighting Color&lt;br /&gt;
9e fb ad 3f  // 1.36   B Lighting Color&lt;br /&gt;
0a d7 b3 3f  // 1.40   G Lighting Color&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00 80 &lt;br /&gt;
00 00 00 00 &lt;br /&gt;
c2 19 f4 3e  // 0.48&lt;br /&gt;
60 08 61 3f  // 0.88&lt;br /&gt;
78 a0 51 43  // 209.63&lt;br /&gt;
00 00 00 00&lt;br /&gt;
60 08 61 bf  // -0.88&lt;br /&gt;
c2 19 f4 3e  //  0.48&lt;br /&gt;
67 43 a3 c2  // -81.63&lt;br /&gt;
00 00 80 3f  // 1&lt;br /&gt;
00 00 00 00 &lt;br /&gt;
00 00 00                         &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRT==&lt;br /&gt;
&lt;br /&gt;
Particle File&lt;br /&gt;
&lt;br /&gt;
==PSH==&lt;br /&gt;
&lt;br /&gt;
Pixel Shader? File&lt;br /&gt;
&lt;br /&gt;
==PST==&lt;br /&gt;
&lt;br /&gt;
Playback File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_QSTFileType|QST - '''QueST files''']]==&lt;br /&gt;
QueST files are XML files describing journal quests. [[TRE_QSTFileType|Let's examine them here.]]&lt;br /&gt;
&lt;br /&gt;
==SAT==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SAT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
53 4D 41 54     //SMAT&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SAT Format is used for linking MGN together with its Skeleton and Lat File (Lat File is a List of Animations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
FORM-|&lt;br /&gt;
     |-SMATFORM-|&lt;br /&gt;
                |-0003INFO&lt;br /&gt;
                |-MSGN&lt;br /&gt;
                |-SKTI&lt;br /&gt;
                |-LATX&lt;br /&gt;
[/code]&lt;br /&gt;
&lt;br /&gt;
Note: Sometimes it may have an extra FORM inside SMATFORM which will not be added to this documentation for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0003INFO:&lt;br /&gt;
Structure:&lt;br /&gt;
&amp;lt;4 Byte&amp;gt; &amp;lt;4 Bytes&amp;gt; &amp;lt;1 Byte&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 4 Bytes Represents how many lmg's there will be in the MSGN Format (LMG's link to MGN's)&lt;br /&gt;
Next 4 Bytes Represent How many Skeletons there are in the SKTI Format&lt;br /&gt;
Last Represents if a LATX Exists or not (00 or 01), if it doesn't then the LATX FORM Isn't needed.&lt;br /&gt;
&lt;br /&gt;
MSGN:&lt;br /&gt;
File Path to the Appearance with a NULL Terminator&lt;br /&gt;
EG&lt;br /&gt;
appearance/mesh/bocatt_hue.lmg&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SKTI:&lt;br /&gt;
Links the Skeleton in and has a reference to the part of the body the Skeleton affects.&lt;br /&gt;
EG (note this has 2 Skeletons in)&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;&amp;lt;NULL&amp;gt;appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;head&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Face Skeleton only affects the head and is mentioned, where all_b.skt affects the entire body so its left &amp;quot;blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LATX:&lt;br /&gt;
First 2 bytes represent how many LATS &amp;amp; Skeletons will be in the file.&lt;br /&gt;
This Example has two (first two bytes are 02 00)&lt;br /&gt;
&lt;br /&gt;
appearance/skeleton/all_b.skt&amp;lt;NULL&amp;gt;appearance/lat/all_m.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
appearance/skeleton/hum_m_face.skt&amp;lt;NULL&amp;gt;appearance/lat/hum_m_face.lat&amp;lt;NULL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links the Skeleton up with the Animation List.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFK==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SFK ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SFK - Usually Used in Sound Forge/Sony Vegas&lt;br /&gt;
&lt;br /&gt;
Only exists in data_other and patch_01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probably only there due to someone forgetting to &amp;quot;clean&amp;quot; it out when packing it (Suggested by someone else, makes the most sense)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SFP - Building Foot Print==&lt;br /&gt;
&lt;br /&gt;
This file contains the info on building Footprints.  One Block in game is 8m x 8m.&lt;br /&gt;
Still a few Unknowns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Player Merchant Tent   uses a 3 x 3 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 44 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d// FOOTFORM&lt;br /&gt;
00 00 00 38 // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
00 00 80 40 // float 4&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 0c // byte count for next section&lt;br /&gt;
48 46 48 00 // HFH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
48 46 48 00 // HFH &lt;br /&gt;
&lt;br /&gt;
Small Tatooine House  uses a 3 x 4 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 48 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 3c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
03 00 00 00 // 3 blocks&lt;br /&gt;
04 00 00 00 // 4 blocks&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
01 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 10 // byte count for next section&lt;br /&gt;
48 48 48 00 // HHH&lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
46 46 46 00 // FFF &lt;br /&gt;
46 46 46 00 // FFF&lt;br /&gt;
&lt;br /&gt;
Med Tatooine House  uses a 5 x 5 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 56 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d  // FOOTFORM&lt;br /&gt;
00 00 00 4a // byte count to end&lt;br /&gt;
30 30 30 30 // unk&lt;br /&gt;
49 4e 46 4f // INFO &lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
05 00 00 00 // 5 blocks&lt;br /&gt;
05 00 00 00 // 5 blocks &lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
02 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT &lt;br /&gt;
00 00 00 1e // byte count for next section&lt;br /&gt;
48 48 48 48 48 00 // HHHHH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 46 46 46 48 00 // HFFFH&lt;br /&gt;
48 48 48 48 48 00 // HHHHH &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic PA Hall  uses a 7 x 8 block&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d // FORM&lt;br /&gt;
00 00 00 78 // total byte count&lt;br /&gt;
46 4f 4f 54 46 4f 52 4d // FOOTFORM&lt;br /&gt;
00 00 00 6c // byte count to end&lt;br /&gt;
30 30 30 30 // UNK&lt;br /&gt;
49 4e 46 4f // INFO&lt;br /&gt;
00 00 00 18 // byte count for next section&lt;br /&gt;
07 00 00 00 // 7 blocks&lt;br /&gt;
08 00 00 00 // 8 blocks&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
03 00 00 00 // UNK&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
00 00 00 41 // float 8&lt;br /&gt;
50 52 4e 54 // PRNT&lt;br /&gt;
00 00 00 40 // byte count for next section&lt;br /&gt;
48 48 48 48 48 48 48 00 // HHHHHHH&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
46 46 46 46 46 46 46 00 // FFFFFFF&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
48 46 46 46 46 46 48 00 // HFFFFFH&lt;br /&gt;
&lt;br /&gt;
H are the house green relief when in placement mode&lt;br /&gt;
F are the house foot print&lt;br /&gt;
00 are just spacers to tell thats its the end of that footprint line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Structure Footprint File lists information about how a structure appears during StructurePlacementMode.&lt;br /&gt;
&lt;br /&gt;
It follows a basic IFF format, FORM type FOOT. The only FORM version seen is 0000. It then has two chunks: INFO and PRNT.&lt;br /&gt;
&lt;br /&gt;
The INFO chunk is structured:&lt;br /&gt;
INT = rows&lt;br /&gt;
INT = columns&lt;br /&gt;
INT = the block to return x position from&lt;br /&gt;
INT = the block to return y position from&lt;br /&gt;
FLOAT = row to meter conversion ratio&lt;br /&gt;
FLOAT = column to meter conversion ratio&lt;br /&gt;
&lt;br /&gt;
The PRNT chunk is structured as a list of null terminated strings. There are as many strings as the number of columns, and the length of the string is equal to the number of rows + 1 for the NULL byte.&lt;br /&gt;
&lt;br /&gt;
Each byte in this string signifies a type:&lt;br /&gt;
0x48 = H = Terrain can have non-collidable flora in this location, and still place a structure.&lt;br /&gt;
0x46 = F = Terrain cannot have non-collidable flora in this location, or structure can not be placed.&lt;br /&gt;
0x2E = . = Ignore this block of terrain when considering structure placement.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SHT - '''shader'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SHT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SKT - Skeleton (MESH)==&lt;br /&gt;
{{Box_TREformats|SKT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    *  Form:SKTM&lt;br /&gt;
          o Form:000# (The # is an ASCII numerical character, not sure of the meaning for this form.)&lt;br /&gt;
                + Record: INFO&lt;br /&gt;
                      # Number of bones - 32-bit unsigned int&lt;br /&gt;
                + Record: NAME&lt;br /&gt;
                      # Name of bone: Null terminated ascii string * (Number of bones).&lt;br /&gt;
                + Record: PRNT&lt;br /&gt;
                      # Parent bone index - 32-bit integer * (Number of bones).(Index into bone list. -1 for no parent. One index for each bone.)&lt;br /&gt;
                + Form: RPRE&lt;br /&gt;
                      # Pre-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: RPST&lt;br /&gt;
                      # Post-rotation quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: BPTR&lt;br /&gt;
                      # Bone position - 3 32-bit float * (Number of bones). XYZ position&lt;br /&gt;
                + Form: BPRO&lt;br /&gt;
                      # Bone pose?? quaternion - 4 32-bit float * (Number of bones).&lt;br /&gt;
                + Form: JROR&lt;br /&gt;
                      # Bone ??? - 32-bit int * (Number of bones). (Always seems to be 0.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SND==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SND ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
46 4f 52 4d              // FORM (Element)&lt;br /&gt;
&lt;br /&gt;
00 00 00 a7              // Length Of Data that Follows (Count starts after this byte) (a7 = 167)&lt;br /&gt;
&lt;br /&gt;
53 44 32 44              // SD2D (Element)&lt;br /&gt;
&lt;br /&gt;
30 30 30 33              // 0003 (Version ?)&lt;br /&gt;
&lt;br /&gt;
00 00 00 9b              // string length&lt;br /&gt;
&lt;br /&gt;
73 61 6d 70&lt;br /&gt;
6c 65 2f 61&lt;br /&gt;
6d 62 5f 63&lt;br /&gt;
6c 6f 6e 69&lt;br /&gt;
6e 67 5f 66&lt;br /&gt;
61 63 69 6c&lt;br /&gt;
69 74 79 5f&lt;br /&gt;
69 6e 74 5f&lt;br /&gt;
6c 70 2e 77&lt;br /&gt;
61 76 00 00              // sample/amb_cloning_facility_int_lp.wav&lt;br /&gt;
&lt;br /&gt;
00 00 00 00              // ?&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00 &lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
FF FF FF FF&lt;br /&gt;
FF FF FF FF              // ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00 00&lt;br /&gt;
&lt;br /&gt;
C0                       // Bitrate (192) (Again?)&lt;br /&gt;
&lt;br /&gt;
3F                       // Volume ?&lt;br /&gt;
&lt;br /&gt;
00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 01&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
00 80 3F 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 00&lt;br /&gt;
&lt;br /&gt;
00 00 00 00&lt;br /&gt;
00 00 00 02&lt;br /&gt;
00 00 00 CD&lt;br /&gt;
CC CC 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==SPR==&lt;br /&gt;
&lt;br /&gt;
Sprite File&lt;br /&gt;
&lt;br /&gt;
==SSA==&lt;br /&gt;
&lt;br /&gt;
SSA? File&lt;br /&gt;
&lt;br /&gt;
==[[TRE_STFFileType|STF - '''Strings Table File (Language)''']]==&lt;br /&gt;
{{Box_TREformats|STF ''format''|&lt;br /&gt;
It contains all the game's strings. During network communications the strings are identificated with: filename without extension + code + ansi string id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Header:&lt;br /&gt;
[int]      // STF file type header id (sequence: 0xCD 0xAB 0x00 0x00, value: 0x0000ABCD = 43981)&lt;br /&gt;
[byte]     // useless? flag (might be a boolean, seen so far: 0x01 and 0x00)&lt;br /&gt;
[int]      // next free index in file to add an item, always &amp;gt; items count (useless for us)&lt;br /&gt;
[int]      // items count&lt;br /&gt;
&lt;br /&gt;
Then items list, for each:&lt;br /&gt;
[int]      // item index in the file (eg: 1, 2, 9, 3, 7, ...) &lt;br /&gt;
[int]      // code (gesture?)&lt;br /&gt;
[int]      // unicode digits count of the sentence (eg: 11)&lt;br /&gt;
[u_string] // 2 bytes per char (eg: &amp;quot;hello world&amp;quot; is 11 digits long, 22 bytes total)&lt;br /&gt;
&lt;br /&gt;
Then item's string ids, for each:&lt;br /&gt;
[int]      // item index in the file matching one in previous list (eg: 1, 2, 9, 3, 7, ...)&lt;br /&gt;
[int]      // ascii digits count of the string id (eg: 12)&lt;br /&gt;
[a_string] // 1 byte per char (eg: &amp;quot;basic_answer&amp;quot; is 12 digits long, 12 bytes total)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}Understood at 80%.&lt;br /&gt;
&lt;br /&gt;
==SWH==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|SWH''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TGA - '''Targa Texture'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TGA ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Terrain files Are divided in 2 main sections. The terrain generator and the maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[TRN (FileFormat)|TRN - '''Terrain File''']]==&lt;br /&gt;
[[Image:Trn layers.jpg]]&lt;br /&gt;
{{Box_TREformats|TRN ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TRT - '''Texture Renderer File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TRT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==TXT - '''Text File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|TXT ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==UI - '''User Interface File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|UI ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==VSH - '''Vertex Shader Script'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|VSH ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Shader City - Possible App to open the Vertex Shader Scripts)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WAV - '''WAV Audio File'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WAV ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==WS - '''world snapshot'''==&lt;br /&gt;
&lt;br /&gt;
{{Box_TREformats|WS ''format''|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'WSNP' FORM (ws file)&lt;br /&gt;
&lt;br /&gt;
- FORM&lt;br /&gt;
- NODS&lt;br /&gt;
- size&lt;br /&gt;
- offset to stringtable&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 E4     //formsize&lt;br /&gt;
&lt;br /&gt;
4E 4F 44 45     //NODE&lt;br /&gt;
&lt;br /&gt;
46 4F 52 4D     //FORM&lt;br /&gt;
&lt;br /&gt;
00 00 04 D8     //formsize &lt;br /&gt;
 &lt;br /&gt;
30 30 30 30     //0000&lt;br /&gt;
&lt;br /&gt;
44 41 54 41     //DATA&lt;br /&gt;
&lt;br /&gt;
00 00 00 34     //datasize&lt;br /&gt;
&lt;br /&gt;
01 A7 15 00     //id&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //parentid&lt;br /&gt;
&lt;br /&gt;
70 00 00 00     //strtable index&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //ox&lt;br /&gt;
&lt;br /&gt;
D4 15 1E BE     //oY&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //oz&lt;br /&gt;
&lt;br /&gt;
51 EE 7C 3F     //ow&lt;br /&gt;
&lt;br /&gt;
00 00 00 00     //scale??&lt;br /&gt;
&lt;br /&gt;
38 CA A0 45     //x&lt;br /&gt;
&lt;br /&gt;
00 00 AF 43     //y&lt;br /&gt;
&lt;br /&gt;
EE DE B2 C4     //z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
00 00 00 44     //type?&lt;br /&gt;
&lt;br /&gt;
7B D6 12 E7     //?? &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
World Snapshot&lt;br /&gt;
&lt;br /&gt;
There is one .ws file per planet (none for space that I have found yet although it would seem applicable), containing a list of items found outdoors on each planets.  This includes buildings, terminals, streetlights, fog/special effects, ruins, and so forth.  Trees/plants/rocks are not included unless they are somehow unique or special.&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=User:Viaron&amp;diff=257292</id>
		<title>User:Viaron</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=User:Viaron&amp;diff=257292"/>
				<updated>2014-12-09T04:34:58Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: Created Page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''John Yoerger (Viaron)'''&lt;br /&gt;
&lt;br /&gt;
''SWG:ANH Staff''&lt;br /&gt;
&lt;br /&gt;
[http://wiki.swganh.org/index.php/Special:Contributions/Viaron View My Wiki Contributions]&lt;br /&gt;
&lt;br /&gt;
Email: [mailto:jyoerger10@msn.com jyoerger10@msn.com]&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=ShowLootBox_(000004BC)&amp;diff=79434</id>
		<title>ShowLootBox (000004BC)</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=ShowLootBox_(000004BC)&amp;diff=79434"/>
				<updated>2013-03-31T00:23:36Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: New page: Various internet sites are there which assist you in obtaining your no cost copy from the reporting companies.&amp;lt;br&amp;gt;Preparing for debt elimination - Finally, debtors are ready to begin the f...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Various internet sites are there which assist you in obtaining your no cost copy from the reporting companies.&amp;lt;br&amp;gt;Preparing for debt elimination - Finally, debtors are ready to begin the final stage of eliminating their debt and achieving their credit back on track. Someone could possibly look at all of one's credit zynga casino chips, enquiries, credit account score and just a wide selection of more. Consumer Info Corporation is considered being giving credit report to positively much more as opposed to 3. Confirm any facts that you just encounter. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Users must call the organization to cancel and when that is done prior to the thirty days are up, they won't be charged. The credit history reporting businesses present a beneficial credit standing monitoring services and it is perfectly really worth $fifteen 30 days in my belief in case all you want can be your free credit history score report, just simply cancel prior to your 7 day cost-free trial.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;You can adjust your release and discover how it affects the pins. Bear in mind, it is possible to get a definite by going by way of the Federal Trade Commission. One can easily get the credit history report inside the websites.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;my webpage - [http://Smrdawg.com/babs/link/26042 this website]&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	<entry>
		<id>http://wiki.swganh.org/index.php?title=CommandTimer_(00000448)&amp;diff=79433</id>
		<title>CommandTimer (00000448)</title>
		<link rel="alternate" type="text/html" href="http://wiki.swganh.org/index.php?title=CommandTimer_(00000448)&amp;diff=79433"/>
				<updated>2013-03-31T00:19:03Z</updated>
		
		<summary type="html">&lt;p&gt;Viaron: New page: You'll need to must make a new request every yr that you simply wish to modify the one. might not get a person's credit rating report except disclosure is produced a credit report is going...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You'll need to must make a new request every yr that you simply wish to modify the one. might not get a person's credit rating report except disclosure is produced a credit report is going to be made application for along with several circumstances will need to be given authorization through the individual.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nonetheless, the cost-free credit score report which you are entitledfree credit reports&amp;lt;/a&amp;gt;&lt;/div&gt;</summary>
		<author><name>Viaron</name></author>	</entry>

	</feed>