This page contains notes for the game Wii Party U.
Voice Bank
hdr.bin is a xml file concerning the Voice Banks used in game, here is somethings from it, specifically for the Austrailian English Karen Voice.
<?xml version="1.0"?>
<NUANCE>
<VERSION>NUAN_1.0</VERSION>
<HEADER>
<BROKERSTRING>pipeline/Australian English/karen/16/bet2/text/pcm</BROKERSTRING>
<PRIORITY>3102</PRIORITY>
<PARAMETERS>
<language>Australian English</language>
<langcode>ENA</langcode>
<langid>20</langid>
<langversion>5.2.3.11273</langversion>
<nativetypeofchar>utf-16</nativetypeofchar>
<voice>Karen</voice>
<voiceversion>5.2.3.10020</voiceversion>
<gender>Female</gender>
<age>Adult</age>
<fecfg>cfg1</fecfg>
<fedataprefix></fedataprefix>
<fedatapackaging>clc</fedatapackaging>
<fevoice>Karen</fevoice>
<frequencyhz>16000</frequencyhz>
<voicemodel>bet2</voicemodel>
<reduction></reduction>
<coder></coder>
<bitrate></bitrate>
<overheadframes></overheadframes>
<audiooutputmimetype>audio/L16;rate=16000</audiooutputmimetype>
<audiooutputsamplebits>16</audiooutputsamplebits>
<bet2voicequality>med</bet2voicequality>
</PARAMETERS>
<OBJECTS>
<AUDIOFETCHER>audiofetch</AUDIOFETCHER>
<DCTEG>dcteg</DCTEG>
<DOMAINMNGR>domain_mngr</DOMAINMNGR>
<FE_DCTLKP>fe/fe_dctlkp</FE_DCTLKP>
<FE_DEPES>fe/fe_depes</FE_DEPES>
<INET>inetspi</INET>
<PHONMAP>phonmap</PHONMAP>
</OBJECTS>
<COMPONENTS>
<COMPONENT>xcoder</COMPONENT>
<COMPONENT>ttt/re</COMPONENT>
<COMPONENT>pp/text</COMPONENT>
<COMPONENT>fe/fe_lid</COMPONENT>
<COMPONENT>fe/fe_udwl</COMPONENT>
<COMPONENT>fe/fe_clcml</COMPONENT>
<COMPONENT>fe/fe_promptoriorth</COMPONENT>
<COMPONENT>fe/fe_unixlit</COMPONENT>
<COMPONENT>fe/fe_initlingdb</COMPONENT>
<COMPONENT>fe/fe_promptorth</COMPONENT>
<COMPONENT>fe/tokentn</COMPONENT>
<COMPONENT>fe/fe_abbrtn</COMPONENT>
<COMPONENT>fe/fe_puncsptn</COMPONENT>
<COMPONENT>fe/fe_oneword</COMPONENT>
<COMPONENT>fe/fe_pos</COMPONENT>
<COMPONENT>fe/fe_hmogrph</COMPONENT>
<COMPONENT>fe/fe_phrasing</COMPONENT>
<COMPONENT>fe/fe_normout</COMPONENT>
<COMPONENT>fe/fe_prompt</COMPONENT>
<COMPONENT>fe/fe_global</COMPONENT>
<COMPONENT>fe/fe_deinitlingdb</COMPONENT>
<COMPONENT>select/bet2</COMPONENT>
<COMPONENT>synth/bet2</COMPONENT>
<COMPONENT>audioinserter</COMPONENT>
<COMPONENT>phonmap/mrk</COMPONENT>
<COMPONENT>xcoder/mrksync</COMPONENT>
</COMPONENTS>
<RESOURCES>
<!-- The next entry specifies a broker string for the user dict -->
<RESOURCE content-type="application/edct-bin-dictionary;loader=broker">
userdct/ena
</RESOURCE>
</RESOURCES>
</HEADER>
</NUANCE>
Models
In Wii Party U, there are many configurations available to edit, these come in the form of many different formats! All having different uses and purposes in development.
BNFM#
This is the games model format, this is a regular 3D model, it has the WU header, it can be opened either with a 3DS Max Script or a PY script, it however is pretty useless without, BNFMSA.
BNFMSA#
The SA at the end means Skeletal Animation, so naturally this is used for giving it proper animations so it all comes to life in the game!
MFA#
This is a xml that links bnfm and bnfmsa.
<!-- Nd Libs RTTI xml -->
<Object symbol="NdResMotFrameAttr">
<Value name="_modelPath" type="Chars">E:\Projects\Nexpy\nexpy_env\nexpy\dvddata\content\common\ch_base\pc\mdl\pc00_normal\pc00_normal_m0.bnfm</Value>
<Value name="_motionPath" type="Chars">E:\Projects\Nexpy\nexpy_env\nexpy\dvddata\content\common\ch_base\pc\mot\ball_forward00_w.bnfmsa</Value>
<Value name="_attrNum" type="u32">2</Value>
<Value name="_bitSize" type="u32">37</Value>
<Object symbol="NdResMotFrameAttr::ItemList" name="_item">
<Array name="ItemList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResMotFrameAttr::Item">
<Value name="_name" type="Chars">SEQ_SE_PLY_NMG408_FOOTSTEP</Value>
<Value name="_id" type="s32">0</Value>
<Array name="_attr" type="s32">
<!-- index="0" -->
<Value type="s32">32</Value>
<!-- index="1" -->
<Value type="s32">-1</Value>
<!-- index="2" -->
<Value type="s32">-1</Value>
<!-- index="3" -->
<Value type="s32">-1</Value>
</Array>
<Array name="_Bit" type="b32">
<!-- index="0" -->
<Value type="b32">true</Value>
<!-- index="1" -->
<Value type="b32">true</Value>
<!-- index="2" -->
<Value type="b32">true</Value>
<!-- index="3" -->
<Value type="b32">false</Value>
<!-- index="4" -->
<Value type="b32">false</Value>
<!-- index="5" -->
<Value type="b32">false</Value>
<!-- index="6" -->
<Value type="b32">false</Value>
<!-- index="7" -->
<Value type="b32">false</Value>
<!-- index="8" -->
<Value type="b32">false</Value>
<!-- index="9" -->
<Value type="b32">false</Value>
<!-- index="10" -->
<Value type="b32">false</Value>
<!-- index="11" -->
<Value type="b32">false</Value>
<!-- index="12" -->
<Value type="b32">false</Value>
<!-- index="13" -->
<Value type="b32">false</Value>
<!-- index="14" -->
<Value type="b32">false</Value>
<!-- index="15" -->
<Value type="b32">false</Value>
<!-- index="16" -->
<Value type="b32">false</Value>
<!-- index="17" -->
<Value type="b32">false</Value>
<!-- index="18" -->
<Value type="b32">false</Value>
<!-- index="19" -->
<Value type="b32">false</Value>
<!-- index="20" -->
<Value type="b32">false</Value>
<!-- index="21" -->
<Value type="b32">false</Value>
<!-- index="22" -->
<Value type="b32">false</Value>
<!-- index="23" -->
<Value type="b32">false</Value>
<!-- index="24" -->
<Value type="b32">false</Value>
<!-- index="25" -->
<Value type="b32">false</Value>
<!-- index="26" -->
<Value type="b32">false</Value>
<!-- index="27" -->
<Value type="b32">false</Value>
<!-- index="28" -->
<Value type="b32">false</Value>
<!-- index="29" -->
<Value type="b32">false</Value>
<!-- index="30" -->
<Value type="b32">false</Value>
<!-- index="31" -->
<Value type="b32">false</Value>
<!-- index="32" -->
<Value type="b32">false</Value>
<!-- index="33" -->
<Value type="b32">false</Value>
<!-- index="34" -->
<Value type="b32">false</Value>
<!-- index="35" -->
<Value type="b32">false</Value>
<!-- index="36" -->
<Value type="b32">false</Value>
</Array>
</Object>
<!-- index="1" -->
<Object symbol="NdResMotFrameAttr::Item">
<Value name="_name" type="Chars">SEQ_SE_PLY_NMG408_FOOTSTEP</Value>
<Value name="_id" type="s32">1</Value>
<Array name="_attr" type="s32">
<!-- index="0" -->
<Value type="s32">37</Value>
<!-- index="1" -->
<Value type="s32">-1</Value>
<!-- index="2" -->
<Value type="s32">-1</Value>
<!-- index="3" -->
<Value type="s32">-1</Value>
</Array>
<Array name="_Bit" type="b32">
<!-- index="0" -->
<Value type="b32">false</Value>
<!-- index="1" -->
<Value type="b32">false</Value>
<!-- index="2" -->
<Value type="b32">false</Value>
<!-- index="3" -->
<Value type="b32">false</Value>
<!-- index="4" -->
<Value type="b32">false</Value>
<!-- index="5" -->
<Value type="b32">false</Value>
<!-- index="6" -->
<Value type="b32">false</Value>
<!-- index="7" -->
<Value type="b32">false</Value>
<!-- index="8" -->
<Value type="b32">false</Value>
<!-- index="9" -->
<Value type="b32">false</Value>
<!-- index="10" -->
<Value type="b32">false</Value>
<!-- index="11" -->
<Value type="b32">false</Value>
<!-- index="12" -->
<Value type="b32">false</Value>
<!-- index="13" -->
<Value type="b32">false</Value>
<!-- index="14" -->
<Value type="b32">false</Value>
<!-- index="15" -->
<Value type="b32">false</Value>
<!-- index="16" -->
<Value type="b32">false</Value>
<!-- index="17" -->
<Value type="b32">false</Value>
<!-- index="18" -->
<Value type="b32">true</Value>
<!-- index="19" -->
<Value type="b32">true</Value>
<!-- index="20" -->
<Value type="b32">true</Value>
<!-- index="21" -->
<Value type="b32">false</Value>
<!-- index="22" -->
<Value type="b32">false</Value>
<!-- index="23" -->
<Value type="b32">false</Value>
<!-- index="24" -->
<Value type="b32">false</Value>
<!-- index="25" -->
<Value type="b32">false</Value>
<!-- index="26" -->
<Value type="b32">false</Value>
<!-- index="27" -->
<Value type="b32">false</Value>
<!-- index="28" -->
<Value type="b32">false</Value>
<!-- index="29" -->
<Value type="b32">false</Value>
<!-- index="30" -->
<Value type="b32">false</Value>
<!-- index="31" -->
<Value type="b32">false</Value>
<!-- index="32" -->
<Value type="b32">false</Value>
<!-- index="33" -->
<Value type="b32">false</Value>
<!-- index="34" -->
<Value type="b32">false</Value>
<!-- index="35" -->
<Value type="b32">false</Value>
<!-- index="36" -->
<Value type="b32">false</Value>
</Array>
</Object>
</Array>
</Object>
</Object>
OCOL#
This is for Model collision! It has shape types, categories and radius!
<?xml version="1.0" encoding="shift_jis"?>
<!-- Nd Libs RTTI xml -->
<Object symbol="NdResObjectCollision" version="2">
<Object symbol="NdResObjectCollision::ItemList" name="itemList_">
<Array name="Items" type="Struct">
<!-- index="0" -->
<Object symbol="NdResObjectCollision::Item">
<Value name="name_" type="Chars">hit</Value>
<Value name="category_" type="u8">0</Value>
<Value name="shapeType_" type="u8">9</Value>
<Array name="nodeName_" type="Class">
<!-- index="0" -->
<Object symbol="NdString">
<Value name="string" type="Chars">-1</Value>
</Object>
<!-- index="1" -->
<Object symbol="NdString">
<Value name="string" type="Chars">-1</Value>
</Object>
</Array>
<Array name="radius_" type="f32">
<!-- index="0" -->
<Value type="f32">5</Value>
<!-- index="1" -->
<Value type="f32">10</Value>
</Array>
<Array name="offset_" type="Struct">
<!-- index="0" -->
<Object symbol="NdVector3">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">-8</Value>
</Object>
<!-- index="1" -->
<Object symbol="NdVector3">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">7</Value>
</Object>
</Array>
</Object>
<!-- index="1" -->
<Object symbol="NdResObjectCollision::Item">
<Value name="name_" type="Chars">Object</Value>
<Value name="category_" type="u8">3</Value>
<Value name="shapeType_" type="u8">9</Value>
<Array name="nodeName_" type="Class">
<!-- index="0" -->
<Object symbol="NdString">
<Value name="string" type="Chars">-1</Value>
</Object>
<!-- index="1" -->
<Object symbol="NdString">
<Value name="string" type="Chars">-1</Value>
</Object>
</Array>
<Array name="radius_" type="f32">
<!-- index="0" -->
<Value type="f32">7</Value>
<!-- index="1" -->
<Value type="f32">10</Value>
</Array>
<Array name="offset_" type="Struct">
<!-- index="0" -->
<Object symbol="NdVector3">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">-8</Value>
</Object>
<!-- index="1" -->
<Object symbol="NdVector3">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">7</Value>
</Object>
</Array>
</Object>
</Array>
</Object>
</Object>
TP#
This one does decently puzzle me, however it is safe to assume this and LTP are very closely linked.
<?xml version="1.0" encoding="shift_jis"?>
<!-- Nd Libs RTTI xml -->
<Object symbol="NdResTaskPost">
<Object symbol="NdResTaskPost::GroupInfoList" name="_groupList">
<Array name="GroupInfoList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">meteor1</Value>
<Value name="_id" type="s32">0</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResTaskPost::TaskInfo">
<Value name="_symbol" type="Chars">TaskHitObjMeteroL</Value>
<Value name="_postID" type="u32">8</Value>
<Object symbol="TaskHitObjMeteroL" name="_pTask">
<Value name="taskParam_" type="u32">0</Value>
<Value name="attribute_" type="u8">0</Value>
<Value name="cullingBit_" type="u32">0</Value>
<Value name="RenderViewTV0" type="b32">true</Value>
<Value name="RenderViewTV1" type="b32">false</Value>
<Value name="RenderViewTV2" type="b32">false</Value>
<Value name="RenderViewTV3" type="b32">false</Value>
<Value name="RenderViewDRC0" type="b32">false</Value>
<Value name="RenderViewTV2D" type="b32">false</Value>
<Value name="RenderViewDRC2D" type="b32">false</Value>
<Object symbol="NdVector3" name="position_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Object symbol="NdVector3" name="rotate_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Object symbol="NdVector3" name="scale_">
<Value name="x_" type="f32">1</Value>
<Value name="y_" type="f32">1</Value>
<Value name="z_" type="f32">1</Value>
</Object>
<Object symbol="NdSphere" name="sphere_">
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">-0.269601</Value>
<Value name="y_" type="f32">0.898</Value>
<Value name="z_" type="f32">0.1131</Value>
</Object>
<Value name="radius_" type="f32">22.645161</Value>
</Object>
<Object symbol="NdModModelAttach" name="modAttach_">
<Value name="boneId_" type="s32">-2</Value>
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
</Object>
</Object>
</Object>
<!-- index="1" -->
<Object symbol="NdResTaskPost::TaskInfo">
<Value name="_symbol" type="Chars">TaskHitObjMeteroM</Value>
<Value name="_postID" type="u32">8</Value>
<Object symbol="TaskHitObjMeteroM" name="_pTask">
<Value name="taskParam_" type="u32">0</Value>
<Value name="attribute_" type="u8">0</Value>
<Value name="cullingBit_" type="u32">0</Value>
<Value name="RenderViewTV0" type="b32">true</Value>
<Value name="RenderViewTV1" type="b32">false</Value>
<Value name="RenderViewTV2" type="b32">false</Value>
<Value name="RenderViewTV3" type="b32">false</Value>
<Value name="RenderViewDRC0" type="b32">false</Value>
<Value name="RenderViewTV2D" type="b32">false</Value>
<Value name="RenderViewDRC2D" type="b32">false</Value>
<Object symbol="NdVector3" name="position_">
<Value name="x_" type="f32">33</Value>
<Value name="y_" type="f32">15</Value>
<Value name="z_" type="f32">-66</Value>
</Object>
<Object symbol="NdVector3" name="rotate_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Object symbol="NdVector3" name="scale_">
<Value name="x_" type="f32">1</Value>
<Value name="y_" type="f32">1</Value>
<Value name="z_" type="f32">1</Value>
</Object>
<Object symbol="NdSphere" name="sphere_">
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">-0.1126</Value>
<Value name="y_" type="f32">0.27115</Value>
<Value name="z_" type="f32">0.34855</Value>
</Object>
<Value name="radius_" type="f32">16.141069</Value>
</Object>
<Object symbol="NdModModelAttach" name="modAttach_">
<Value name="boneId_" type="s32">-2</Value>
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
</Object>
</Object>
</Object>
<!-- index="2" -->
<Object symbol="NdResTaskPost::TaskInfo">
<Value name="_symbol" type="Chars">TaskHitObjMeteroS</Value>
<Value name="_postID" type="u32">8</Value>
<Object symbol="TaskHitObjMeteroS" name="_pTask">
<Value name="taskParam_" type="u32">0</Value>
<Value name="attribute_" type="u8">0</Value>
<Value name="cullingBit_" type="u32">0</Value>
<Value name="RenderViewTV0" type="b32">true</Value>
<Value name="RenderViewTV1" type="b32">false</Value>
<Value name="RenderViewTV2" type="b32">false</Value>
<Value name="RenderViewTV3" type="b32">false</Value>
<Value name="RenderViewDRC0" type="b32">false</Value>
<Value name="RenderViewTV2D" type="b32">false</Value>
<Value name="RenderViewDRC2D" type="b32">false</Value>
<Object symbol="NdVector3" name="position_">
<Value name="x_" type="f32">-24</Value>
<Value name="y_" type="f32">-7</Value>
<Value name="z_" type="f32">-33</Value>
</Object>
<Object symbol="NdVector3" name="rotate_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Object symbol="NdVector3" name="scale_">
<Value name="x_" type="f32">1</Value>
<Value name="y_" type="f32">1</Value>
<Value name="z_" type="f32">1</Value>
</Object>
<Object symbol="NdSphere" name="sphere_">
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">-0.0299</Value>
<Value name="y_" type="f32">0.550015</Value>
<Value name="z_" type="f32">-0.195695</Value>
</Object>
<Value name="radius_" type="f32">11.54723</Value>
</Object>
<Object symbol="NdModModelAttach" name="modAttach_">
<Value name="boneId_" type="s32">-2</Value>
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
</Object>
</Object>
</Object>
</Array>
</Object>
MCF#
.mcf is always followed by a bnfm of the same name, .mcf is a configuration file for models. This is a decently sized snippet which will get you a relatively good idea what these mcf files do.
<?xml version="1.0" encoding="shift_jis"?>
<!-- Nd Libs RTTI xml -->
<Object symbol="NdResModelConfig::Header">
<Value name="meshCount_" type="u32">12</Value>
<Value name="materialCount_" type="u32">3</Value>
<Value name="nodeCount_" type="u32">33</Value>
<Array name="MaterialArray" type="Struct">
<!-- index="0" -->
<Object symbol="NdResModelConfig::Material">
<Value name="name_" type="Chars">sepal_01_m</Value>
<Object symbol="NdResModelConfig::Material::Color" name="color_">
<Object symbol="NdColorF" name="diffuse_">
<Value name="r_" type="f32">0.74902</Value>
<Value name="g_" type="f32">0.74902</Value>
<Value name="b_" type="f32">0.74902</Value>
<Value name="a_" type="f32">1</Value>
</Object>
<Object symbol="NdColorF" name="ambient_">
<Value name="r_" type="f32">0.294118</Value>
<Value name="g_" type="f32">0.294118</Value>
<Value name="b_" type="f32">0.294118</Value>
<Value name="a_" type="f32">1</Value>
</Object>
<Object symbol="NdColorF" name="emission_">
<Value name="r_" type="f32">0</Value>
<Value name="g_" type="f32">0</Value>
<Value name="b_" type="f32">0</Value>
<Value name="a_" type="f32">1</Value>
</Object>
<Object symbol="NdColorF" name="specualr0_">
<Value name="r_" type="f32">0.639216</Value>
<Value name="g_" type="f32">0.666667</Value>
<Value name="b_" type="f32">0.454902</Value>
<Value name="a_" type="f32">175</Value>
</Object>
<Object symbol="NdColorF" name="specualr1_">
<Value name="r_" type="f32">0</Value>
<Value name="g_" type="f32">0</Value>
<Value name="b_" type="f32">0</Value>
<Value name="a_" type="f32">0</Value>
</Object>
<Object symbol="NdColorF" name="rimColor_">
<Value name="r_" type="f32">0.082353</Value>
<Value name="g_" type="f32">0.2</Value>
<Value name="b_" type="f32">0.007843</Value>
<Value name="a_" type="f32">0.6</Value>
</Object>
</Object>
<Object symbol="NdResModelConfig::Material::Blend" name="blend_">
<Value name="value_" type="u32">587333632</Value>
</Object>
<Object symbol="NdResModelConfig::Material::Texture" name="textureSlot_[0]">
<Value name="textureName_" type="Chars">sepal_01</Value>
<Value name="rotate_" type="f32">0</Value>
<Value name="scaleS_" type="f32">1</Value>
<Value name="scaleT_" type="f32">1</Value>
<Value name="translateS_" type="f32">0</Value>
<Value name="translateT_" type="f32">0</Value>
<Value name="flodBias_" type="f32">0</Value>
<Value name="lodBias_" type="s8">0</Value>
<Value name="minLod_" type="s8">0</Value>
<Value name="maxLod_" type="s8">-1</Value>
<Value name="magFilter" type="u32">1</Value>
<Value name="minFilter" type="u32">1</Value>
<Value name="mipMapFilter" type="u32">2</Value>
<Value name="wrapS" type="u32">0</Value>
<Value name="wrapT" type="u32">0</Value>
<Value name="UV Index" type="u32">0</Value>
<Value name="txtureParameter_.r_" type="f32">1</Value>
<Value name="txtureParameter_.g_" type="f32">1</Value>
<Value name="txtureParameter_.b_" type="f32">1</Value>
<Value name="txtureParameter_.a_" type="f32">1</Value>
<Value name="UV Coord" type="u32">0</Value>
<Value name="index_" type="u16">0</Value>
This is from the gold flower model in nmg409. There are many config files that can be edited to get a specific result. For example in the texture slot it uses sepal_01, if you check the folder this is in it leads to sepal_01.gtx, which is an image file, there are tons more config files like this, all models have their own mcf to make sure they work correctly. Speaking of the texture loading it does it has 4 slots in total. It seems for most settings 0 = false, 1 = true, so you could just enable them at your will, since you can open and modify these files by a regular text app. You can add shaders like, optical camouflage, shadows, fog, you can edit the materials of the file, you can even edit its ambient, You can edit most parameters. Some use 32 bit numbers that go way above 0 or 1. Basically you can edit almost everything and this is only a small snippet, the whole xml just for the golden flower is 1526 lines! The files full name is nmg409_obj_flower_gold.mcf
LTP#
LTP's main job is to add light to a model, its relativley simple, it has settings for UV lights, debug display it has light types, yeah,
<?xml version="1.0" encoding="shift_jis"?>
<!-- Nd Libs RTTI xml -->
<Object symbol="NdResTaskPost">
<Value name="counter_" type="s32">0</Value>
<Value name="パス" type="Chars"></Value>
<Value name="size_" type="u32">0</Value>
<Object symbol="NdResTaskPost::GroupInfoList" name="_groupList">
<Array name="GroupInfoList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">system slot 00</Value>
<Value name="_id" type="s32">0</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
</Array>
</Object>
<!-- index="1" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">char slot 00</Value>
<Value name="_id" type="s32">1</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
</Array>
</Object>
<!-- index="2" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">char slot 01</Value>
<Value name="_id" type="s32">2</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
</Array>
</Object>
<!-- index="3" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">char slot 02</Value>
<Value name="_id" type="s32">3</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
</Array>
</Object>
<!-- index="4" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">char slot 03</Value>
<Value name="_id" type="s32">4</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
</Array>
</Object>
<!-- index="5" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">map slot 00</Value>
<Value name="_id" type="s32">5</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResTaskPost::TaskInfo">
<Value name="_symbol" type="Chars">NdTaskDirectionalLight</Value>
<Value name="_postID" type="u32">6</Value>
<Object symbol="NdTaskDirectionalLight" name="_pTask">
<Value name="taskParam_" type="u32">6</Value>
<Value name="attribute_" type="u8">0</Value>
<Value name="cullingBit_" type="u32">0</Value>
<Value name="RenderViewTV0" type="b32">true</Value>
<Value name="RenderViewTV1" type="b32">true</Value>
<Value name="RenderViewTV2" type="b32">true</Value>
<Value name="RenderViewTV3" type="b32">true</Value>
<Value name="RenderViewDRC0" type="b32">true</Value>
<Value name="RenderViewTV2D" type="b32">false</Value>
<Value name="RenderViewDRC2D" type="b32">false</Value>
<Object symbol="NdVector3" name="position_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">200</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Object symbol="NdVector3" name="rotate_">
<Value name="x_" type="f32">-75</Value>
<Value name="y_" type="f32">-1.5</Value>
<Value name="z_" type="f32">15</Value>
</Object>
<Object symbol="NdVector3" name="scale_">
<Value name="x_" type="f32">1</Value>
<Value name="y_" type="f32">1</Value>
<Value name="z_" type="f32">1</Value>
</Object>
<Object symbol="NdSphere" name="sphere_">
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Value name="radius_" type="f32">20</Value>
</Object>
<Object symbol="NdModModelAttach" name="modAttach_">
<Value name="boneId_" type="s32">-2</Value>
<Value name="ボーン名" type="s32">-2</Value>
<Object name="pAttachTask">NULL</Object>
<Object symbol="NdVector3" name="offset_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
</Object>
<Object symbol="NdColorF" name="color_">
<Value name="r_" type="f32">1</Value>
<Value name="g_" type="f32">1</Value>
<Value name="b_" type="f32">1</Value>
<Value name="a_" type="f32">0.2</Value>
</Object>
<Value name="lightType_" type="u32">0</Value>
<Value name="debugDisp_" type="b32">false</Value>
<Value name="active_" type="b32">true</Value>
<Object symbol="NdVector3" name="direction_">
<Value name="x_" type="f32">0.256544</Value>
<Value name="y_" type="f32">-0.931259</Value>
<Value name="z_" type="f32">-0.25873</Value>
</Object>
<Object symbol="NdColorF" name="ambientColor_">
<Value name="r_" type="f32">0.2</Value>
<Value name="g_" type="f32">0.2</Value>
<Value name="b_" type="f32">0.2</Value>
<Value name="a_" type="f32">1</Value>
</Object>
<Value name="shadow_" type="b32">true</Value>
<Object symbol="NdTaskCameraFreeView" name="shadowCamera_">
<Value name="taskParam_" type="u32">0</Value>
<Value name="attribute_" type="u8">0</Value>
<Value name="cullingBit_" type="u32">0</Value>
<Value name="RenderViewTV0" type="b32">true</Value>
<Value name="RenderViewTV1" type="b32">true</Value>
<Value name="RenderViewTV2" type="b32">true</Value>
<Value name="RenderViewTV3" type="b32">true</Value>
<Value name="RenderViewDRC0" type="b32">true</Value>
<Value name="RenderViewTV2D" type="b32">false</Value>
<Value name="RenderViewDRC2D" type="b32">false</Value>
<Object symbol="NdVector3" name="position_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">200</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Object symbol="NdVector3" name="position_offset_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Object symbol="NdVector3" name="target_">
<Value name="x_" type="f32">0.256544</Value>
<Value name="y_" type="f32">199.068741</Value>
<Value name="z_" type="f32">-0.25773</Value>
</Object>
<Object symbol="NdVector3" name="rotate_">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">180</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Value name="distance_" type="f32">70</Value>
<Value name="画角" type="f32">50</Value>
<Value name="アスペクト" type="f32">1.777778</Value>
<Value name="Zニア" type="f32">3</Value>
<Value name="Zファー" type="f32">100000</Value>
<Value name="padControl_" type="b32">false</Value>
<Value name="fogEnable_" type="b32">false</Value>
<Value name="fogNear_" type="f32">10</Value>
<Value name="fogFar_" type="f32">2000</Value>
<Object symbol="NdColorF" name="fogColor_">
<Value name="r_" type="f32">1</Value>
<Value name="g_" type="f32">1</Value>
<Value name="b_" type="f32">1</Value>
<Value name="a_" type="f32">1</Value>
</Object>
<Value name="アニメーションリスト" type="s32">0</Value>
<Object symbol="NdVector3" name="viewVector_">
<Value name="x_" type="f32">0.256611</Value>
<Value name="y_" type="f32">-0.9315</Value>
<Value name="z_" type="f32">-0.257797</Value>
</Object>
<Value name="cullFarZ_" type="f32">5200</Value>
<Value name="cullFarZEnable_" type="b32">false</Value>
<Value name="cascadeSize_" type="u32">4</Value>
<Value name="shadowRange_" type="f32">600</Value>
<Value name="splitId_" type="u32">0</Value>
<Value name="splitRatio_" type="f32">0.7</Value>
<Value name="shadowCastingRange_" type="f32">600</Value>
<Value name="splitDistance_" type="f32">0</Value>
<Value name="shadowMapWidth_" type="f32">512</Value>
<Value name="shadowMapHeight_" type="f32">512</Value>
<Value name="shadowNearOffset_" type="f32">0</Value>
</Object>
<Value name="debugShadow_" type="b32">false</Value>
<Value name="debugCascadeShadow_" type="b32">false</Value>
<Array name="cascadeShadowCamera_" type="Class">
<!-- index="0" -->
FTP#
No this is not file transfering, The FTP's job is to add filters and one of its more important jobs, anti aliasing, it can edit luminance, vingette, simple color, blending color, many things!
<?xml version="1.0" encoding="shift_jis"?>
<!-- Nd Libs RTTI xml -->
<Object symbol="NdResTaskPost">
<Value name="counter_" type="s32">0</Value>
<Value name="パス" type="Chars"></Value>
<Value name="size_" type="u32">0</Value>
<Object symbol="NdResTaskPost::GroupInfoList" name="_groupList">
<Array name="GroupInfoList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">fxaa</Value>
<Value name="_id" type="s32">0</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResTaskPost::TaskInfo">
<Value name="_symbol" type="Chars">NdTaskFilterFXAA</Value>
<Value name="_postID" type="u32">19</Value>
<Object symbol="NdTaskFilterFXAA" name="_pTask">
<Value name="taskParam_" type="u32">19</Value>
<Value name="attribute_" type="u8">0</Value>
<Value name="cullingBit_" type="u32">0</Value>
<Value name="RenderViewTV0" type="b32">true</Value>
<Value name="RenderViewTV1" type="b32">true</Value>
<Value name="RenderViewTV2" type="b32">true</Value>
<Value name="RenderViewTV3" type="b32">true</Value>
<Value name="RenderViewDRC0" type="b32">true</Value>
<Value name="RenderViewTV2D" type="b32">false</Value>
<Value name="RenderViewDRC2D" type="b32">false</Value>
<Value name="タスクIDチェンジ" type="u8">19</Value>
<Value name="enable_[NdSysFilter::FILTER_TV_0]" type="b32">true</Value>
<Value name="enable_[NdSysFilter::FILTER_DRC_0]" type="b32">false</Value>
</Object>
</Object>
</Array>
</Object>
<!-- index="1" -->
<Object symbol="NdResTaskPost::GroupInfo">
<Value name="_name" type="Chars">dof</Value>
<Value name="_id" type="s32">1</Value>
<Object symbol="NdVector3" name="_pos">
<Value name="x_" type="f32">0</Value>
<Value name="y_" type="f32">0</Value>
<Value name="z_" type="f32">0</Value>
</Object>
<Array name="TaskInfoList" type="Struct">
<!-- index="0" -->
<Object symbol="NdResTaskPost::TaskInfo">
<Value name="_symbol" type="Chars">NdTaskFilterDOF</Value>
<Value name="_postID" type="u32">19</Value>
<Object symbol="NdTaskFilterDOF" name="_pTask">
<Value name="taskParam_" type="u32">19</Value>
<Value name="attribute_" type="u8">0</Value>
<Value name="cullingBit_" type="u32">0</Value>
<Value name="RenderViewTV0" type="b32">true</Value>
<Value name="RenderViewTV1" type="b32">true</Value>
<Value name="RenderViewTV2" type="b32">true</Value>
<Value name="RenderViewTV3" type="b32">true</Value>
<Value name="RenderViewDRC0" type="b32">true</Value>
<Value name="RenderViewTV2D" type="b32">false</Value>
<Value name="RenderViewDRC2D" type="b32">false</Value>
<Value name="タスクIDチェンジ" type="u8">19</Value>
<Value name="enable_[NdSysFilter::FILTER_TV_0]" type="b32">true</Value>
<Value name="enable_[NdSysFilter::FILTER_DRC_0]" type="b32">false</Value>
<Value name="enable_[NdSysFilter::FILTER_TV_1]" type="b32">false</Value>
<Value name="enable_[NdSysFilter::FILTER_TV_2]" type="b32">false</Value>
<Value name="enable_[NdSysFilter::FILTER_TV_3]" type="b32">false</Value>
<Value name="enable_[NdSysFilter::FILTER_DRC_1]" type="b32">false</Value>
<Value name="enable_[NdSysFilter::FILTER_DRC_2]" type="b32">false</Value>
<Value name="enable_[NdSysFilter::FILTER_DRC_3]" type="b32">false</Value>
<Value name="debugDraw_" type="b32">false</Value>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_TV_0]">
<Value name="dofShaderParam_.x_" type="f32">0</Value>
<Value name="dofShaderParam_.y_" type="f32">2</Value>
<Value name="dofShaderParam_.z_" type="f32">900</Value>
<Value name="dofShaderParam_.w_" type="f32">1500</Value>
<Value name="bokeh_" type="f32">0.2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_TV_1]">
<Value name="dofShaderParam_.x_" type="f32">20</Value>
<Value name="dofShaderParam_.y_" type="f32">40</Value>
<Value name="dofShaderParam_.z_" type="f32">50</Value>
<Value name="dofShaderParam_.w_" type="f32">120</Value>
<Value name="bokeh_" type="f32">2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_TV_2]">
<Value name="dofShaderParam_.x_" type="f32">20</Value>
<Value name="dofShaderParam_.y_" type="f32">40</Value>
<Value name="dofShaderParam_.z_" type="f32">50</Value>
<Value name="dofShaderParam_.w_" type="f32">120</Value>
<Value name="bokeh_" type="f32">2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_TV_3]">
<Value name="dofShaderParam_.x_" type="f32">20</Value>
<Value name="dofShaderParam_.y_" type="f32">40</Value>
<Value name="dofShaderParam_.z_" type="f32">50</Value>
<Value name="dofShaderParam_.w_" type="f32">120</Value>
<Value name="bokeh_" type="f32">2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_DRC_0]">
<Value name="dofShaderParam_.x_" type="f32">20</Value>
<Value name="dofShaderParam_.y_" type="f32">40</Value>
<Value name="dofShaderParam_.z_" type="f32">50</Value>
<Value name="dofShaderParam_.w_" type="f32">120</Value>
<Value name="bokeh_" type="f32">2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_DRC_1]">
<Value name="dofShaderParam_.x_" type="f32">20</Value>
<Value name="dofShaderParam_.y_" type="f32">40</Value>
<Value name="dofShaderParam_.z_" type="f32">50</Value>
<Value name="dofShaderParam_.w_" type="f32">120</Value>
<Value name="bokeh_" type="f32">2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_DRC_2]">
<Value name="dofShaderParam_.x_" type="f32">20</Value>
<Value name="dofShaderParam_.y_" type="f32">40</Value>
<Value name="dofShaderParam_.z_" type="f32">50</Value>
<Value name="dofShaderParam_.w_" type="f32">120</Value>
<Value name="bokeh_" type="f32">2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
<Object symbol="NdFilterDof::DofWork" name="Work_[NdSysFilter::FILTER_DRC_3]">
<Value name="dofShaderParam_.x_" type="f32">20</Value>
<Value name="dofShaderParam_.y_" type="f32">40</Value>
<Value name="dofShaderParam_.z_" type="f32">50</Value>
<Value name="dofShaderParam_.w_" type="f32">120</Value>
<Value name="bokeh_" type="f32">2</Value>
<Value name="splitScreen_" type="b32">false</Value>
</Object>
</Object>
</Object>
</Array>
</Object>
EFMT#
The EMFT's main job seems to be dealing with particles and math for the particles, The first tag it has is ResImmEffect, Whatever tool they used to automatically create this file was on version 21 and revision 26 at the time of creation!
<?xml version="1.0" encoding="shift_jis"?>
<!-- Nd Libs RTTI xml -->
<Object symbol="ResImmEffect">
<Value name="comment_" type="Chars">ゴールドフラワーエフェクト</Value>
<Value name="hookMode_" type="u8">0</Value>
<Value name="bHookNode_" type="u8">0</Value>
<Value name="hookNodeName_" type="Chars"></Value>
<Value name="emitterBillBoard_" type="u8">0</Value>
<Object symbol="ResImmEmitterList" name="emitterList_">
<Array name="EmitterList" type="Struct">
<!-- index="0" -->
<Object symbol="ResImmEmitter">
<Value name="version_" type="u32">21</Value>
<Value name="toolRevision_" type="u32">26</Value>
<Value name="name_" type="Chars">light</Value>
<Value name="comment_" type="Chars">キラキラ</Value>
<Object symbol="ResImmEmitterParamEmitter" name="emitter_">
<Value name="childHook_" type="u8">0</Value>
<Value name="startParentLifeRate_" type="f32">0</Value>
<Value name="createStep_" type="u16">0</Value>
<Value name="emitterShape_" type="u8">1</Value>
<Array name="shapeParam_" type="f32">
<!-- index="0" -->
<Value type="f32">0.6</Value>
<!-- index="1" -->
<Value type="f32">0.6</Value>
<!-- index="2" -->
<Value type="f32">0</Value>
<!-- index="3" -->
<Value type="f32">0</Value>
</Array>
<Value name="circleDivision_" type="u32">5</Value>
<Value name="sphereDivision_" type="u32">2</Value>
<Value name="lineDivision_" type="u32">2</Value>
<Value name="torusDivision_" type="u32">1</Value>
<Value name="circleArcOffset_" type="f32">0</Value>
<Value name="circleArcSize_" type="f32">360</Value>
<Value name="sphereArcOffset_" type="f32">0</Value>
<Value name="sphereArcSize_" type="f32">360</Value>
<Object symbol="effectlib::Vector3" name="scale_">
<Value name="x" type="f32">0.9</Value>
<Value name="y" type="f32">0.9</Value>
<Value name="z" type="f32">0.9</Value>
</Object>
<Object symbol="effectlib::Vector3" name="rotate_">
<Value name="x" type="f32">0</Value>
<Value name="y" type="f32">0</Value>
<Value name="z" type="f32">0</Value>
</Object>
<Object symbol="effectlib::Vector3" name="translate_">
<Value name="x" type="f32">0</Value>
<Value name="y" type="f32">3</Value>
<Value name="z" type="f32">0</Value>
</Object>
<Value name="prevUpdateFrame_" type="u16">0</Value>
</Object>
<Object symbol="ResImmEmitterParamEmittion" name="emittion_">
<Value name="bStopWithParent_" type="u8">0</Value>
<Value name="emitRate_" type="u8">1</Value>
<Value name="startFrame_" type="u16">0</Value>
<Value name="emitTime_" type="u16">0</Value>
<Value name="emitStep_" type="u16">10</Value>
<Value name="emitStepRnd_" type="u16">0</Value>
<Value name="inheritedMoveRate_" type="f32">0</Value>
<Value name="figureVel_" type="f32">0.15</Value>
<Value name="emitVel_" type="f32">0</Value>
<Object symbol="effectlib::Vector3" name="emitVelDir_">
<Value name="x" type="f32">0</Value>
<Value name="y" type="f32">0</Value>
<Value name="z" type="f32">0</Value>
</Object>
<Value name="initVelRnd_" type="f32">0</Value>
<Object symbol="effectlib::Vector3" name="spreadVec_">
<Value name="x" type="f32">0.05</Value>
<Value name="y" type="f32">0.05</Value>
<Value name="z" type="f32">0.05</Value>
</Object>
<Value name="airRegist_" type="f32">0.95</Value>
<Value name="gravityMode_" type="u8">0</Value>
<Value name="gravityForce_" type="f32">0</Value>
<Object symbol="effectlib::Vector3" name="gravityDir_">
<Value name="x" type="f32">0</Value>
<Value name="y" type="f32">0</Value>
<Value name="z" type="f32">0</Value>
</Object>
</Object>
<Object symbol="ResImmEmitterParamParticle" name="particle_">
<Value name="life_" type="u16">50</Value>
<Value name="animationFitType_" type="u8">1</Value>
<Value name="lifeRnd_" type="f32">0</Value>
<Value name="followupMode_" type="u8">0</Value>
<Value name="followupRatio_" type="f32">0.35</Value>
<Value name="particleType_" type="u8">0</Value>
<Value name="expression_" type="u8">0</Value>
<Value name="stripeHistoryMax_" type="u8">60</Value>
<Value name="stripeStep_" type="u8">0</Value>
<Value name="stripeAlphaA_" type="f32">1</Value>
<Value name="stripeAlphaB_" type="f32">1</Value>
<Value name="stripeConnectOption_" type="u8">0</Value>
<Value name="stripeDir_" type="u8">1</Value>
<Value name="stripeNormal_" type="u8">2</Value>
<Value name="stripeTexture_" type="u8">0</Value>
<Value name="directionalDir_" type="u8">3</Value>
<Value name="directionalFace_" type="u8">0</Value>
<Value name="pivotMode_" type="u8">1</Value>
<Object symbol="effectlib::Vector2" name="rotBias_">
<Value name="x" type="f32">0</Value>
<Value name="y" type="f32">0</Value>
</Object>
</Object>
<Object symbol="ResImmEmitterParamRender" name="render_">
<Value name="bDraw_" type="u8">1</Value>
<Value name="user_[0]" type="f32">0</Value>
<Value name="user_[1]" type="f32">0</Value>
<Value name="user_[2]" type="f32">0</Value>
<Value name="user_[3]" type="f32">0</Value>
<Value name="bZTest_" type="u8">1</Value>
<Value name="zTestFunc_" type="u8">1</Value>
<Value name="bZWrite_" type="u8">0</Value>
<Value name="bFog_" type="u8">0</Value>
<Value name="bOrder_" type="u8">0</Value>
<Value name="order_" type="u8">0</Value>
<Value name="randomSeed_" type="u8">0</Value>
<Value name="SRCカラー割合" type="u8">4</Value>
<Value name="DSTカラー割合" type="u8">5</Value>
<Value name="SRCアルファ割合" type="u8">4</Value>
<Value name="DSTアルファ割合" type="u8">5</Value>
<Value name="blend_" type="s8">0</Value>
<Value name="blendExt_" type="u8">0</Value>
<Value name="pixelShaderId_" type="s32">2</Value>
<Value name="relativePixelShaderPath_" type="Chars"></Value>
<Value name="absolutePixelShaderPath_" type="Chars"></Value>
<Value name="emitterBillBoard_" type="u8">0</Value>
</Object>
<Object symbol="ResImmEmitterParamTexture" name="texture_">
<Value name="immSlot_[0].relativePath_" type="Chars">.\light_01.gtx</Value>
<Value name="immSlot_[0].wrapU_" type="u8">0</Value>
<Value name="immSlot_[0].wrapV_" type="u8">0</Value>
<Value name="immSlot_[0].matrixMode_" type="u8">0</Value>
<Object symbol="effectlib::Vector2" name="immSlot_[0].translate_">
<Value name="x" type="f32">0</Value>
<Value name="y" type="f32">0</Value>
</Object>
<Value name="immSlot_[0].rotate_" type="f32">0</Value>
<Object symbol="effectlib::Vector2" name="immSlot_[0].scale_">
<Value name="x" type="f32">1</Value>
<Value name="y" type="f32">1</Value>
</Object>
<Value name="immSlot_[0].animationType_" type="u8">0</Value>
<Value name="immSlot_[0].divX_" type="u8">1</Value>
<Value name="immSlot_[0].divY_" type="u8">1</Value>
<Value name="immSlot_[0].patternMax_" type="u8">1</Value>
<Array name="immSlot_[0].pattern_" type="u8">
There are as you can see near the end, a slot for a different animation type! a light_01 texture is also located in the same folder as this file. The Japanese text text translates to Color Ratio and Alpha Ratio,
EFPJ#
EFPJ's main purpose is to in a way sort of make it so the game knows how to link EMFT to GTX, so basically the particle emitters will know what graphic to use for their particles! It also assigns them an ID, so for example, Index 2 is the Smoke emitter, and Index 2 for textures is smoke.gtx. They can easily find what to match due to all of this taking place in the effects folder, Seemingly this file is then put through NDCube's EffectLibs program to create a .efar file, this is a headerless file that is binary, this is to make sure to cut down on any possible loading times that going through an xml for a wii u would take, it saves a copy of this efar to any PC to and makes a .h file defining the index, This .h file is leftover.
<?xml version="1.0" encoding="shift_jis"?>
<!-- Nd Libs RTTI xml -->
<Object symbol="ResProject">
<Value name="version_" type="u32">21</Value>
<Value name="toolRevision_" type="u32">26</Value>
<Value name="comment_" type="Chars"></Value>
<Array name="Effect" type="Chars">
<!-- index="0" -->
<Value type="Chars">.\nmg409_pa_good01.efmt</Value>
<!-- index="1" -->
<Value type="Chars">.\nmg409_pa_smoke01.efmt</Value>
<!-- index="2" -->
<Value type="Chars">.\nmg409_gold_01.efmt</Value>
<!-- index="3" -->
<Value type="Chars">.\nmg409_pa_good02.efmt</Value>
<!-- index="4" -->
<Value type="Chars">.\nmg409_pa_water.efmt</Value>
</Array>
<Array name="EffectPack" type="Chars">
</Array>
<Array name="PixelShader" type="Chars">
</Array>
<Array name="TextureSetting" type="Struct">
<!-- index="0" -->
<Object symbol="ResTextureSetting">
<Value name="relativePath_" type="Chars">.\circle_01.gtx</Value>
<Value name="comment_" type="Chars"></Value>
<Value name="format_" type="u8">5</Value>
<Value name="combine_" type="u8">3</Value>
</Object>
<!-- index="1" -->
<Object symbol="ResTextureSetting">
<Value name="relativePath_" type="Chars">.\light_01.gtx</Value>
<Value name="comment_" type="Chars"></Value>
<Value name="format_" type="u8">5</Value>
<Value name="combine_" type="u8">3</Value>
</Object>
<!-- index="2" -->
<Object symbol="ResTextureSetting">
<Value name="relativePath_" type="Chars">.\smoke_01.gtx</Value>
<Value name="comment_" type="Chars"></Value>
<Value name="format_" type="u8">5</Value>
<Value name="combine_" type="u8">3</Value>
</Object>
<!-- index="3" -->
<Object symbol="ResTextureSetting">
<Value name="relativePath_" type="Chars">.\shine_line_01.gtx</Value>
<Value name="comment_" type="Chars"></Value>
<Value name="format_" type="u8">5</Value>
<Value name="combine_" type="u8">3</Value>
</Object>
<!-- index="4" -->
<Object symbol="ResTextureSetting">
<Value name="relativePath_" type="Chars">.\water.gtx</Value>
<Value name="comment_" type="Chars"></Value>
<Value name="format_" type="u8">5</Value>
<Value name="combine_" type="u8">3</Value>
</Object>
</Array>
<Object symbol="ResProject::ExportInfo" name="exportInfo_">
<Value name="bPcOut_" type="u8">1</Value>
<Value name="pcOutPath_" type="Chars">.\nmg409_pa_01_pc.efar</Value>
<Value name="bWiiuOut_" type="u8">1</Value>
<Value name="wiiuOutPath_" type="Chars">.\nmg409_pa_01.efar</Value>
<Value name="bTextureInclude_" type="u8">1</Value>
<Value name="bHeaderOut_" type="u8">1</Value>
<Value name="bHeaderVerbose_" type="u8">1</Value>
<Value name="headerOutPath_" type="Chars">.\nmg409_pa_01.h</Value>
<Value name="headerEffectSymbolPrefix_" type="Chars">EFF_ID_</Value>
<Value name="headerEffectPackSymbolPrefix_" type="Chars">EFF_PACK_ID_</Value>
</Object>
</Object>
EFAR#
EFAR's are what come out off the converter, a headerless binary format, shaves off alot of loading time, then loading raw xml, if you check the contents of it, in between data there are a bunch of bytes reserved to separate so the Wii U knows when something stops and starts. At the end of the file is what files are inside of it. So you can see the .efmt and .gtx files. This is in a way the games internal table of contents and what to use and where to look for files.
Source Files#
These are the source header files that are outputted for developers, these contain the input file, the output file and what tool was used for conversion, it also defines the EFMT's and what index they belong to so any developer knows which image file belongs to which EMFT. They can be found in npg036/particle, and ch_base/effect, and where the nmg409 one is located, nmg409/effect.
//=====================================================
// exporter : EffectLib ( EffectEditor or EffectConv )
// input : F:\EffectEditor\nmg409\nmg409_pa_01.efpj
// output : nmg409_pa_01.h
//=====================================================
#ifndef _NMG409_PA_01_H_
#define _NMG409_PA_01_H_
// -- EFFECT --
#define EFF_ID_NMG409_PA_01_NMG409_PA_GOOD01 0
#define EFF_ID_NMG409_PA_01_NMG409_PA_SMOKE01 1
#define EFF_ID_NMG409_PA_01_NMG409_GOLD_01 2
#define EFF_ID_NMG409_PA_01_NMG409_PA_GOOD02 3
#define EFF_ID_NMG409_PA_01_NMG409_PA_WATER 4
// -- EFFECT PACK --
#endif // _NMG409_PA_01_H_