mirror of https://github.com/AxioDL/metaforce.git
Added UV Animation 8
This commit is contained in:
parent
3acddce766
commit
2de7d91fe7
|
@ -402,6 +402,33 @@ def make_uva7():
|
||||||
new_grp.links.new(mult5.outputs[0], add2.inputs[1])
|
new_grp.links.new(mult5.outputs[0], add2.inputs[1])
|
||||||
new_grp.links.new(add2.outputs[0], grp_out.inputs[0])
|
new_grp.links.new(add2.outputs[0], grp_out.inputs[0])
|
||||||
|
|
||||||
|
# 8 - Mode 8
|
||||||
|
def make_uva8():
|
||||||
|
new_grp = bpy.data.node_groups.new('RetroUVMode8Node', 'ShaderNodeTree')
|
||||||
|
new_grp.inputs.new('NodeSocketVector', 'UV In')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param1')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param2')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param3')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param4')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param5')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param6')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param7')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param8')
|
||||||
|
new_grp.inputs.new('NodeSocketFloat', 'Param9')
|
||||||
|
new_grp.outputs.new('NodeSocketVector', 'UV Out')
|
||||||
|
new_grp.use_fake_user = True
|
||||||
|
|
||||||
|
# Group inputs
|
||||||
|
grp_in = new_grp.nodes.new('NodeGroupInput')
|
||||||
|
grp_in.location = (-800, 0)
|
||||||
|
|
||||||
|
# Group outputs
|
||||||
|
grp_out = new_grp.nodes.new('NodeGroupOutput')
|
||||||
|
grp_out.location = (0, 0)
|
||||||
|
|
||||||
|
# Links
|
||||||
|
new_grp.links.new(grp_in.outputs[0], grp_out.inputs[0])
|
||||||
|
|
||||||
UV_ANIMATION_GROUPS = (
|
UV_ANIMATION_GROUPS = (
|
||||||
make_uva0,
|
make_uva0,
|
||||||
make_uva1,
|
make_uva1,
|
||||||
|
@ -410,7 +437,8 @@ UV_ANIMATION_GROUPS = (
|
||||||
make_uva4,
|
make_uva4,
|
||||||
make_uva5,
|
make_uva5,
|
||||||
make_uva6,
|
make_uva6,
|
||||||
make_uva7
|
make_uva7,
|
||||||
|
make_uva8
|
||||||
)
|
)
|
||||||
|
|
||||||
# MP3 / DKCR Material Passes:
|
# MP3 / DKCR Material Passes:
|
||||||
|
|
|
@ -215,6 +215,12 @@ public:
|
||||||
{
|
{
|
||||||
return GX::Primitive(*m_cur++ & 0xf8);
|
return GX::Primitive(*m_cur++ & 0xf8);
|
||||||
}
|
}
|
||||||
|
GX::Primitive readPrimitiveAndVat(unsigned& vatOut)
|
||||||
|
{
|
||||||
|
atUint8 val = *m_cur++;
|
||||||
|
vatOut = val & 0x7;
|
||||||
|
return GX::Primitive(val & 0xf8);
|
||||||
|
}
|
||||||
atUint16 readVertCount()
|
atUint16 readVertCount()
|
||||||
{
|
{
|
||||||
atUint16 retval = HECL::SBig(*(atUint16*)m_cur);
|
atUint16 retval = HECL::SBig(*(atUint16*)m_cur);
|
||||||
|
@ -549,7 +555,6 @@ atUint32 ReadGeomSectionsToBlender(HECL::BlenderConnection::PyOutStream& os,
|
||||||
|
|
||||||
while (dl)
|
while (dl)
|
||||||
{
|
{
|
||||||
|
|
||||||
GX::Primitive ptype = dl.readPrimitive();
|
GX::Primitive ptype = dl.readPrimitive();
|
||||||
atUint16 vertCount = dl.readVertCount();
|
atUint16 vertCount = dl.readVertCount();
|
||||||
|
|
||||||
|
@ -570,7 +575,6 @@ atUint32 ReadGeomSectionsToBlender(HECL::BlenderConnection::PyOutStream& os,
|
||||||
atUint8 flip = 0;
|
atUint8 flip = 0;
|
||||||
for (int v=0 ; v<vertCount-2 ; ++v)
|
for (int v=0 ; v<vertCount-2 ; ++v)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (flip)
|
if (flip)
|
||||||
{
|
{
|
||||||
os.format("last_face, last_mesh = add_triangle(bm, bm.verts, (%u,%u,%u), norm_list, (%u,%u,%u), %u, od_list)\n",
|
os.format("last_face, last_mesh = add_triangle(bm, bm.verts, (%u,%u,%u), norm_list, (%u,%u,%u), %u, od_list)\n",
|
||||||
|
@ -646,7 +650,6 @@ atUint32 ReadGeomSectionsToBlender(HECL::BlenderConnection::PyOutStream& os,
|
||||||
/* Advance one prim vert */
|
/* Advance one prim vert */
|
||||||
primVerts[c%3] = dl.readVert(peek);
|
primVerts[c%3] = dl.readVert(peek);
|
||||||
++c;
|
++c;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ptype == GX::TRIANGLES)
|
else if (ptype == GX::TRIANGLES)
|
||||||
|
|
|
@ -200,6 +200,30 @@ void Material::AddTextureAnim(Stream& out,
|
||||||
" new_nodetree.links.new(node.outputs[0], soc_to)\n\n",
|
" new_nodetree.links.new(node.outputs[0], soc_to)\n\n",
|
||||||
idx, vals[0], vals[1]);
|
idx, vals[0], vals[1]);
|
||||||
break;
|
break;
|
||||||
|
case UVAnimation::ANIM_MODE_8:
|
||||||
|
out.format("for link in list(tex_links):\n"
|
||||||
|
" if link.from_node.label == 'MTX_%u':\n"
|
||||||
|
" tex_links.remove(link)\n"
|
||||||
|
" soc_from = link.from_socket\n"
|
||||||
|
" soc_to = link.to_socket\n"
|
||||||
|
" node = new_nodetree.nodes.new('ShaderNodeGroup')\n"
|
||||||
|
" node.node_tree = bpy.data.node_groups['RetroUVMode8Node']\n"
|
||||||
|
" node.location[0] = link.from_node.location[0] + 50\n"
|
||||||
|
" node.location[1] = link.from_node.location[1] - 50\n"
|
||||||
|
" node.inputs[1].default_value = %f\n"
|
||||||
|
" node.inputs[2].default_value = %f\n"
|
||||||
|
" node.inputs[3].default_value = %f\n"
|
||||||
|
" node.inputs[4].default_value = %f\n"
|
||||||
|
" node.inputs[5].default_value = %f\n"
|
||||||
|
" node.inputs[6].default_value = %f\n"
|
||||||
|
" node.inputs[7].default_value = %f\n"
|
||||||
|
" node.inputs[8].default_value = %f\n"
|
||||||
|
" node.inputs[9].default_value = %f\n"
|
||||||
|
" new_nodetree.links.remove(link)\n"
|
||||||
|
" new_nodetree.links.new(soc_from, node.inputs[0])\n"
|
||||||
|
" new_nodetree.links.new(node.outputs[0], soc_to)\n\n",
|
||||||
|
idx, vals[0], vals[1]);
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -244,9 +244,10 @@ struct MaterialSet : BigDNA
|
||||||
ANIM_HSTRIP,
|
ANIM_HSTRIP,
|
||||||
ANIM_VSTRIP,
|
ANIM_VSTRIP,
|
||||||
ANIM_MODEL,
|
ANIM_MODEL,
|
||||||
ANIM_MODE_WHO_MUST_NOT_BE_NAMED
|
ANIM_MODE_WHO_MUST_NOT_BE_NAMED,
|
||||||
|
ANIM_MODE_8
|
||||||
} mode;
|
} mode;
|
||||||
float vals[4];
|
float vals[9];
|
||||||
void read(Athena::io::IStreamReader& reader)
|
void read(Athena::io::IStreamReader& reader)
|
||||||
{
|
{
|
||||||
mode = Mode(reader.readUint32Big());
|
mode = Mode(reader.readUint32Big());
|
||||||
|
@ -269,6 +270,17 @@ struct MaterialSet : BigDNA
|
||||||
vals[0] = reader.readFloatBig();
|
vals[0] = reader.readFloatBig();
|
||||||
vals[1] = reader.readFloatBig();
|
vals[1] = reader.readFloatBig();
|
||||||
break;
|
break;
|
||||||
|
case ANIM_MODE_8:
|
||||||
|
vals[0] = reader.readFloatBig();
|
||||||
|
vals[1] = reader.readFloatBig();
|
||||||
|
vals[2] = reader.readFloatBig();
|
||||||
|
vals[3] = reader.readFloatBig();
|
||||||
|
vals[4] = reader.readFloatBig();
|
||||||
|
vals[5] = reader.readFloatBig();
|
||||||
|
vals[6] = reader.readFloatBig();
|
||||||
|
vals[7] = reader.readFloatBig();
|
||||||
|
vals[8] = reader.readFloatBig();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void write(Athena::io::IStreamWriter& writer) const
|
void write(Athena::io::IStreamWriter& writer) const
|
||||||
|
@ -293,6 +305,17 @@ struct MaterialSet : BigDNA
|
||||||
writer.writeFloatBig(vals[0]);
|
writer.writeFloatBig(vals[0]);
|
||||||
writer.writeFloatBig(vals[1]);
|
writer.writeFloatBig(vals[1]);
|
||||||
break;
|
break;
|
||||||
|
case ANIM_MODE_8:
|
||||||
|
writer.writeFloatBig(vals[0]);
|
||||||
|
writer.writeFloatBig(vals[1]);
|
||||||
|
writer.writeFloatBig(vals[2]);
|
||||||
|
writer.writeFloatBig(vals[3]);
|
||||||
|
writer.writeFloatBig(vals[4]);
|
||||||
|
writer.writeFloatBig(vals[5]);
|
||||||
|
writer.writeFloatBig(vals[6]);
|
||||||
|
writer.writeFloatBig(vals[7]);
|
||||||
|
writer.writeFloatBig(vals[8]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue