1
0
forked from 0ad/0ad

Fixed support for extra-new actor format. Updated binaries.

This was SVN commit r2050.
This commit is contained in:
Ykkrosh 2005-03-26 00:22:42 +00:00
parent c11465cfbf
commit 2073733761
4 changed files with 193 additions and 303 deletions

View File

@ -1,272 +1,158 @@
<?xml version="1.0" encoding="UTF-8"?>
<actor>
<castshadow>true</castshadow>
<group>
<variant>
<name>Base</name>
<frequency>100</frequency>
<mesh>art/meshes/skeletal/m_dress_a.pmd</mesh>
<material>art/materials/player_trans.xml</material>
<texture>art/textures/skins/skeletal/plac_rome_e.dds</texture>
<animations>
<animation>
<name>Idle</name>
<file>art/animation/biped/dudeidle.psa</file>
<speed>200</speed>
</animation>
<animation>
<name>Walk</name>
<file>art/animation/biped/dudewalk_swordshield.psa</file>
<speed>700</speed>
</animation>
<animation>
<name>Build</name>
<file>art/animation/biped/dudebuild.psa</file>
<speed>150</speed>
</animation>
<animation>
<name>Chop</name>
<file>art/animation/biped/dudechop.psa</file>
<speed>150</speed>
</animation>
<animation>
<name>Death</name>
<file>art/animation/biped/dudedeath_sword.psa</file>
<speed>200</speed>
</animation>
<animation>
<name>Decay</name>
<file>art/animation/biped/dudedecay_sword.psa</file>
<speed>100</speed>
</animation>
<animation>
<name>Attack</name>
<file>art/animation/biped/dudeattack.psa</file>
<speed>300</speed>
</animation>
<animation>
<name>Attack1</name>
<file>art/animation/biped/dudeattack1.psa</file>
<speed>300</speed>
</animation>
</animations>
</variant>
</group>
<group>
<variant>
<name>Helmet</name>
<props>
<prop>
<attachpoint>helmet</attachpoint>
<model>Elite Helmet</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<name>Head</name>
<frequency>50</frequency>
<props>
<prop>
<attachpoint>head</attachpoint>
<model>Dude Head</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
<frequency>1</frequency>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>l_hand</attachpoint>
<model>Axe B</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>l_forearm</attachpoint>
<model>Left Glove</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>l_shoulder</attachpoint>
<model>Left Shoulder</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>r_hand</attachpoint>
<model>Axe A</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>r_forearm</attachpoint>
<model>Right Glove</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>r_shoulder</attachpoint>
<model>Right Shoulder</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>chest</attachpoint>
<model>Breastplate</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>back</attachpoint>
<model>Quiver</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>shoulders</attachpoint>
<model>Cape</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>l_leg</attachpoint>
<model>Left Boot</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>r_leg</attachpoint>
<model>Right Boot</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>l_hip</attachpoint>
<model>Left Sheath</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
<group>
<variant>
<props>
<prop>
<attachpoint>r_hip</attachpoint>
<model>Right Sheath</model>
</prop>
</props>
</variant>
<variant>
<name>None</name>
</variant>
</group>
</actor>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<actor version="1">
<castshadow/>
<group>
<variant frequency="100" name="Base">
<animations>
<animation file="biped/dudeidle.psa" name="Idle" speed="200"/>
<animation file="biped/dudewalk_swordshield.psa" name="Walk" speed="700"/>
<animation file="biped/dudebuild.psa" name="Build" speed="150"/>
<animation file="biped/dudechop.psa" name="Chop" speed="150"/>
<animation file="biped/dudedeath_sword.psa" name="Death" speed="200"/>
<animation file="biped/dudedecay_sword.psa" name="Decay" speed="100"/>
<animation file="biped/dudeattack.psa" name="Attack" speed="300"/>
<animation file="biped/dudeattack1.psa" name="Attack1" speed="300"/>
</animations>
<mesh>skeletal/m_dress_a.pmd</mesh>
<texture>skeletal/plac_rome_e.dds</texture>
</variant>
</group>
<group>
<variant name="Helmet">
<props>
<prop actor="props/temp/plac_helmet_e.xml" attachpoint="helmet"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant frequency="50" name="Head">
<props>
<prop actor="props/head/dude_head.xml" attachpoint="head"/>
</props>
</variant>
<variant frequency="1" name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/weapon/weap_axe_b.xml" attachpoint="l_hand"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/l_glove.xml" attachpoint="l_forearm"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/l_shoulder.xml" attachpoint="l_shoulder"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/weapon/weap_axe_a.xml" attachpoint="r_hand"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/r_glove.xml" attachpoint="r_forearm"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/r_shoulder.xml" attachpoint="r_shoulder"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/breastplate.xml" attachpoint="chest"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/quiver.xml" attachpoint="back"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/cape.xml" attachpoint="shoulders"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/l_boot.xml" attachpoint="l_leg"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/r_boot.xml" attachpoint="r_leg"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/l_sheath.xml" attachpoint="l_hip"/>
</props>
</variant>
<variant name="None"/>
</group>
<group>
<variant>
<props>
<prop actor="props/temp/r_sheath.xml" attachpoint="r_hip"/>
</props>
</variant>
<variant name="None"/>
</group>
</actor>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<Entity Tag="test_dude" Parent="combat_dude_roman_a">
<Actor>test_dude</Actor>
<Actor>test_dude.xml</Actor>
</Entity>

View File

@ -140,22 +140,24 @@ bool CObjectBase::Load(const char* filename)
// Define all the elements used in the XML file
#define EL(x) int el_##x = XeroFile.getElementID(#x)
#define AT(x) int at_##x = XeroFile.getAttributeID(#x)
EL(castshadow);
EL(material);
EL(group);
EL(variant);
EL(animations);
EL(animation);
EL(file);
EL(name);
EL(speed);
EL(props);
EL(prop);
EL(attachpoint);
EL(model);
EL(frequency);
EL(mesh);
EL(texture);
AT(file);
AT(name);
AT(speed);
AT(attachpoint);
AT(actor);
AT(frequency);
#undef AT
#undef EL
// (This code is rather worryingly verbose...)
@ -172,21 +174,25 @@ bool CObjectBase::Load(const char* filename)
{
m_Variants.back().resize(m_Variants.back().size()+1);
XERO_ITER_ATTR(variant, attr)
{
if (attr.Name == at_name)
m_Variants.back().back().m_VariantName = attr.Value;
else if (attr.Name == at_frequency)
m_Variants.back().back().m_Frequency = CStr(attr.Value).ToInt();
}
XERO_ITER_EL(variant, option)
{
int option_name = option.getNodeName();
if (option_name == el_name)
m_Variants.back().back().m_VariantName = option.getText();
else if (option_name == el_frequency)
m_Variants.back().back().m_Frequency = CStr(option.getText()).ToInt();
else if (option_name == el_mesh)
if (option_name == el_mesh)
m_Variants.back().back().m_ModelFilename = "art/meshes/" + CStr(option.getText());
else if (option_name == el_texture)
m_Variants.back().back().m_TextureFilename = "art/textures/" + CStr(option.getText());
m_Variants.back().back().m_TextureFilename = "art/textures/skins/" + CStr(option.getText());
else if (option_name == el_animations)
{
@ -194,16 +200,15 @@ bool CObjectBase::Load(const char* filename)
{
Anim anim;
XERO_ITER_EL(anim_element, ae)
XERO_ITER_ATTR(anim_element, ae)
{
int ae_name = ae.getNodeName();
if (ae_name == el_name)
anim.m_AnimName = ae.getText();
else if (ae_name == el_file)
anim.m_FileName = "art/animation/" + CStr(ae.getText());
else if (ae_name == el_speed)
if (ae.Name == at_name)
anim.m_AnimName = ae.Value;
else if (ae.Name == at_file)
anim.m_FileName = "art/animation/" + CStr(ae.Value);
else if (ae.Name == at_speed)
{
anim.m_Speed = CStr(ae.getText()).ToInt() / 100.f;
anim.m_Speed = CStr(ae.Value).ToInt() / 100.f;
if (anim.m_Speed <= 0.0) anim.m_Speed = 1.0f;
}
else
@ -219,13 +224,12 @@ bool CObjectBase::Load(const char* filename)
{
Prop prop;
XERO_ITER_EL(prop_element, pe)
XERO_ITER_ATTR(prop_element, pe)
{
int pe_name = pe.getNodeName();
if (pe_name == el_attachpoint)
prop.m_PropPointName = pe.getText();
else if (pe_name == el_model)
prop.m_ModelName = pe.getText();
if (pe.Name == at_attachpoint)
prop.m_PropPointName = pe.Value;
else if (pe.Name == at_actor)
prop.m_ModelName = pe.Value;
else
; // unrecognised element
}

View File

@ -124,11 +124,11 @@ bool CObjectEntry::BuildModel()
m_Model->AddProp(proppoint,propmodel);
if (oe->m_WalkAnim) propmodel->SetAnimation(oe->m_WalkAnim);
} else {
LOG(ERROR, LOG_CATEGORY, "Failed to build prop model \"%s\" on actor \"%s\"",(const char*) m_Base->m_Name,(const char*) prop.m_ModelName);
LOG(ERROR, LOG_CATEGORY, "Failed to build prop model \"%s\" on actor \"%s\"", (const char*)prop.m_ModelName, (const char*)m_Base->m_Name);
}
}
} else {
LOG(ERROR, LOG_CATEGORY, "Failed to matching prop point called \"%s\" in model \"%s\"", (const char*)prop.m_PropPointName, modelfilename);
LOG(ERROR, LOG_CATEGORY, "Failed to find matching prop point called \"%s\" in model \"%s\" on actor \"%s\"", (const char*)prop.m_PropPointName, modelfilename, (const char*)prop.m_ModelName);
}
}