var array<Material> HaloSkins;
var ConstantColor HaloConstantColor;
var array<Combiner> HaloCombiner,FinalHaloCombiner;
var array<Shader> FinalShader;
var() Color RedTeamColor,BlueTeamColor;
simulated function Setup(xUtil.PlayerRecord rec, optional bool bLoadNow)
{
local byte i,j,k,l,m,n;
if( Class<BaseHaloSpecies>(rec.Species)==None )
rec = class'xUtil'.static.FindPlayerRecord(GetDefaultCharacter());
Species = rec.Species;
RagdollOverride = rec.Ragdoll;
if ( Species!=None && !Species.static.Setup(self,rec) )
{
rec = class'xUtil'.static.FindPlayerRecord(GetDefaultCharacter());
Species = rec.Species;
RagdollOverride = rec.Ragdoll;
if ( !Species.static.Setup(self,rec) )
return;
}
ParentSpecies = Class<BaseHaloSpecies>(Species);
if( ClassIsChildOf(ParentSpecies, class'SpartanSpecies') ){j=0;}
else if( ClassIsChildOf(ParentSpecies, class'EliteSpecies') ){j=1;}
for(k=0;k<Globals.default.CustomSpecies.Length;k++)
{
if( ClassIsChildOf(ParentSpecies, Globals.default.CustomSpecies[k].Species))
j = k+2;
}
if (Controller != None && HaloPlayer(Controller) != none)
{
for (i=0;i<PawnModifier[j].Skins.Length;i++)
{
if (PawnModifier[j].Skins[i] == None)
continue;
HaloSkins[i] = PawnModifier[j].Skins[i].Material;
if( PawnModifier[j].Skins[i].bChangeColors )
{
HaloConstantColor = ConstantColor(Level.ObjectPool.AllocateObject(class'ConstantColor'));
if( HaloConstantColor != none )
{
if (Controller.PlayerReplicationInfo != None && Controller.PlayerReplicationInfo.Team != None)
{
if (Controller.PlayerReplicationInfo.Team.TeamIndex == 0)
HaloConstantColor.Color = RedTeamColor;
else
HaloConstantColor.Color = BlueTeamColor;
}
else
HaloConstantColor.Color = HaloPlayer(Controller).FFAColor;
l = HaloCombiner.Length;
m = FinalHaloCombiner.Length;
n = FinalShader.Length;
HaloCombiner[l] = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
if( HaloCombiner[l] != none )
{
HaloCombiner[l].CombineOperation = CO_Multiply;
HaloCombiner[l].AlphaOperation = AO_Multiply;
HaloCombiner[l].Material1 = PawnModifier[j].Skins[i].Material;
HaloCombiner[l].Material2 = HaloConstantColor;
FinalHaloCombiner[m] = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
if( FinalHaloCombiner[m] != none )
{
FinalHaloCombiner[m].CombineOperation = CO_AlphaBlend_With_Mask;
FinalHaloCombiner[m].AlphaOperation = AO_Use_Mask;
FinalHaloCombiner[m].Material1 = PawnModifier[j].Skins[i].Material;
FinalHaloCombiner[m].Material2 = HaloCombiner[l];
FinalHaloCombiner[m].Mask = PawnModifier[j].Skins[i].Material;
if( PawnModifier[j].Skins[i].bUsesEnhancer )
{
FinalShader[n] = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
if( FinalShader[n] != none )
{
k = PawnModifier[j].Skins[i].EnhancerNum;
FinalShader[n].Diffuse = FinalHaloCombiner[m];
FinalShader[n].Opacity = PawnModifier[j].MaterialEnhancers[k].OpacityMap;
FinalShader[n].Specular = PawnModifier[j].MaterialEnhancers[k].SpecularMap;
FinalShader[n].SpecularityMask = PawnModifier[j].MaterialEnhancers[k].SpecularityMask;
FinalShader[n].SelfIllumination = PawnModifier[j].MaterialEnhancers[k].SelfIlluminationMap;
FinalShader[n].SelfIlluminationMask = PawnModifier[j].MaterialEnhancers[k].SelfIlluminationMask;
FinalShader[n].Detail = PawnModifier[j].MaterialEnhancers[k].DetailMap;
FinalShader[n].DetailScale = PawnModifier[j].MaterialEnhancers[k].DetailScale;
HaloSkins[i] = FinalShader[n];
}
}
else
{
HaloSkins[i] = FinalHaloCombiner[m];
}
}
}
}
}
Controller.Pawn.Skins[PawnModifier[j].Skins[i].SkinNum] = HaloSkins[i];
}
}
ResetPhysicsBasedAnim();
}
simulated event Destroyed()
{
local byte i;
if( HaloConstantColor != none )
{
Level.ObjectPool.FreeObject(HaloConstantColor);
HaloConstantColor = None;
}
for (i=0;i<FinalHaloCombiner.Length;i++)
{
if( FinalHaloCombiner[i] != none )
{
Level.ObjectPool.FreeObject(FinalHaloCombiner[i]);
FinalHaloCombiner[i] = None;
}
}
FinalHaloCombiner.Length = 0;
for (i=0;i<HaloCombiner.Length;i++)
{
if( HaloCombiner[i] != none )
{
Level.ObjectPool.FreeObject(HaloCombiner[i]);
HaloCombiner[i] = None;
}
}
HaloCombiner.Length = 0;
for (i=0;i<FinalShader.Length;i++)
{
if( FinalShader[i] != none )
{
Level.ObjectPool.FreeObject(FinalShader[i]);
FinalShader[i] = None;
}
}
FinalShader.Length = 0;
for (i=0;i<HaloSkins.Length;i++)
{
if( HaloSkins != none )
HaloSkins = None;
}
HaloSkins.Length = 0;
Super.Destroyed();
}
defaultproperties
{
Begin Object Class=HaloMeshModifier Name=PawnModifierSpartan
Skins(0)=(Material=Texture'HaloTC_Textures.Cyborg.Cyborg',bChangeColors=True,bUsesEnhancer=True)
MaterialEnhancers(0)=(SpecularMap=TexEnvMap'HaloTC_Textures.CubeMaps.cyborg_reflection_armor_envtex',SpecularityMask=Texture'HaloTC_Textures.Cyborg.cyborg_multipurpose',SelfIlluminationMap=Texture'HaloTC_Textures.Cyborg.Cyborg',SelfIlluminationMask=Texture'HaloTC_Textures.Cyborg.cyborg_selfillum',DetailMap=Texture'HaloTC_Textures.Detailmaps.detail_corroded_metal_light',DetailScale=10.000000)
RightHandBoneName="#right hand"
LeftHandBoneName="#left hand"
End Object
Begin Object Class=HaloMeshModifier Name=PawnModifierElite
Skins(0)=(Material=Texture'HaloTC_Textures.Elite.Arms',bChangeColors=True,bUsesEnhancer=True)
Skins(1)=(Material=Texture'HaloTC_Textures.Elite.head',bChangeColors=True,bUsesEnhancer=True,SkinNum=1,EnhancerNum=1)
Skins(2)=(Material=Texture'HaloTC_Textures.Elite.legs',SkinNum=2)
Skins(3)=(Material=Texture'HaloTC_Textures.Elite.Torso',bChangeColors=True,bUsesEnhancer=True,SkinNum=4,EnhancerNum=2)
Skins(4)=(Material=Texture'HaloTC_Textures.Elite.Helmet',bChangeColors=True,SkinNum=5)
MaterialEnhancers(0)=(SelfIlluminationMap=Texture'HaloTC_Textures.Elite.Arms',SelfIlluminationMask=Texture'HaloTC_Textures.Elite.arms_selfillum')
MaterialEnhancers(1)=(SelfIlluminationMap=Texture'HaloTC_Textures.Elite.legs',SelfIlluminationMask=Texture'HaloTC_Textures.Elite.legs_selfillum')
MaterialEnhancers(2)=(SelfIlluminationMap=Texture'HaloTC_Textures.Elite.Torso',SelfIlluminationMask=Texture'HaloTC_Textures.Elite.torso_selfillum')
RightHandBoneName="#right hand elite"
LeftHandBoneName="#left hand elite"
End Object
}