My program doesn't have bugs. It just develops random features.

Difference between revisions of "User:OlympusMons"

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
m
m
Line 234: Line 234:
 
// Class: UTGame_Data
 
// Class: UTGame_Data
 
// Creation date: 11/12/2008 21:03
 
// Creation date: 11/12/2008 21:03
// Last updated: 13/12/2008 19:22
+
// Last updated: 20/12/2008 00:30
 
// Contributors: OlympusMons(/d!b\)
 
// Contributors: OlympusMons(/d!b\)
 
//---------------------------------------------------
 
//---------------------------------------------------
Line 245: Line 245:
  
 
/** Factory Replacement/Per Map Factory Replacement */
 
/** Factory Replacement/Per Map Factory Replacement */
var FactoryReplacer_Data FactoryReplacer;
+
var UTData_FactoryReplacer FactoryData;
var class<FactoryReplacer_Data> FactoryReplacerClass;
+
var class<UTData_FactoryReplacer> FactoryReplacerDataClass;
  
function InitMutator(string Options, out string ErrorMessage)
+
/** This mutator uses Per Map Setting from the FactoryReplacer */
{
+
var config bool bUse_PM_Set;
 +
 
 +
//---------------------------------------------------
 +
 
 +
function InitFactoryReplacer(string CurrentMap){
 
local int iMap;
 
local int iMap;
  
CurrentMap = WorldInfo.GetMapName(true);
+
// CurrentMap = WorldInfo.GetMapName(true);
  
if(FactoryReplacerClass != None){
+
if(FactoryReplacerClass != None) FactoryData = new(self) FactoryReplacerClass;
FactoryReplacer = new(self) FactoryReplacerClass;
+
if(FactoryData == None) return;
`logd("Factor Replacer: "$FactoryReplacer,,'UTGame_Data');
+
}
+
  
if(FactoryReplacer != None)
+
if(FactoryData.bUsePerMapSettings) {
{
+
`logd("Using Per Map Factory Replacer Settings!",,'GameData');
if(FactoryReplacer.bUsePerMapSettings)
+
//TODO: Parse commandline options for this?
{
+
iMap = FactoryReplacer.PerMapFactorySettings.Find('Map', CurrentMap);
`logd("Using Per Map Factory Replacement Settings!",,'GameExpansion');
+
if(iMap != INDEX_NONE) {
//TODO: Parse commandline options for this?
+
FactoryData.SetupPerMapData(iMap);
iMap = FactoryReplacer.PerMapFactorySettings.Find('Map', CurrentMap);
+
}else {
if(iMap != INDEX_NONE){
+
`logd("Using Global Factory Replacer Settings!",,'GameData');
FactoryReplacer.SetupPerMapData(iMap);
+
FactoryData.AddDummyMapEntry(CurrentMap);
}else{
+
`logd("Using Global Factory Replacement Settings!",,'GameExpansion');
+
FactoryReplacer.AddDummyMapEntry(CurrentMap);
+
}
+
 
}
 
}
 
}
 
}
  
 
//FactoryReplacer.ReplacementFactories.FactoriesToReplace
 
//FactoryReplacer.ReplacementFactories.FactoriesToReplace
 
 
}
 
}
  
 
//TODO: Support for any factory, vehicles, weapons, etc
 
//TODO: Support for any factory, vehicles, weapons, etc
 
function FactoryReplacement(NavigationPoint Other){
 
function FactoryReplacement(NavigationPoint Other){
local int iMap, iFactory;
+
local int j, iMap, iFactory;
  
if(FactoryReplacer == None) return;
+
if(FactoryData == None) return;
  
for(j = 0;j < FactoryReplacer.Length();j++) {
+
if(FactoryData.FactoryGroup != 'FT_Vehicle') {
if(Other.IsA(FactoryReplacer.ReplacerFactories[j].ReplacedFactory) &&
+
//Replace Factory
!Other.IsA(FactoryReplacer.ReplacerFactories[j].ReplacedWithFactory))
+
for(j = 0;j < FactoryData.Length();j++) {
{
+
if(Other.IsA(FactoryData.ReplacerFactories[j].ReplacedFactory) &&
ReplaceWith(Other, FactoryReplacer.ReplacerFactories[j].ReplacedWithFactoryPath);
+
!Other.IsA(FactoryData.ReplacerFactories[j].ReplacedWithFactory))
`logd("Factory: "$Other$" Replaced With: "$FactoryReplacer.ReplacerFactories[j].ReplacedWithFactoryPath,,'FactoryReplacer');
+
{
return false; //NewFactory.InitializePickup();
+
ReplaceWith(Other, FactoryData.ReplacerFactories[j].ReplacedWithFactoryPath);
 +
`logd("Factory: "$Other$" Replaced With: "$FactoryData.ReplacerFactories[j].ReplacedWithFactoryPath,,'FactoryReplacer');
 +
return false; //NewFactory.InitializePickup();
 +
}
 +
// else if(ReplacementFactories[j].ReplacedWithFactory ~= "Remove"){
 +
// Factory.Deactivate(); //Deactivate Factory!
 +
// }
 
}
 
}
// else if(ReplacementFactories[j].ReplacedWithFactory ~= "Remove"){
 
// Factory.Deactivate(); //Deactivate Factory!
 
// }
 
}
 
  
iMap = FactoryReplacer.PM_FactorySet.Find('Map', CurrentMap);
+
iMap = FactoryData.PM_FactorySet.Find('Map', CurrentMap);
if(iMap != INDEX_NONE) {
+
if(iMap != INDEX_NONE) {
//TODO: Will add entry for every factory in the map, do not want!
+
//TODO: Will add entry for every factory in the map, do not want!
iFactory = FactoryReplacer.PM_FactorySet[iMap].FactoriesToReplace.Find('ReplacedFactory', PickupFactory(Other).Name);
+
iFactory = FactoryData.PM_FactorySet[iMap].FactoriesToReplace.Find('ReplacedFactory', PickupFactory(Other).Name);
 
+
if(iFactory == INDEX_NONE) {
if(iFactory == INDEX_NONE) {
+
FactoryData.AddPerMapEntry(iMap, PickupFactory(Other));
FactoryReplacer.AddPerMapEntry(iMap, PickupFactory(Other));
+
}
}
+
else if(iFactory != INDEX_NONE) {
else if(iFactory != INDEX_NONE) {
+
FactoryData.UpdatePerMapEntry(iMap, PickupFactory(Other));
FactoryReplacer.UpdatePerMapEntry(iMap, PickupFactory(Other));
+
}
 
}
 
}
 +
}else{
 +
if(UTVehicleFactory(Other) != UTVehicleFactory_TrackTurretBase(Other))
 +
ReplaceVehicle(UTVehicleFactory(Other)); //Mutator
 +
// ModifyVehicle(UTVehicle(Other));
 
}
 
}
 
}
 
}
Line 344: Line 347:
 
// Class: UCSpecies
 
// Class: UCSpecies
 
// Creation date: 08/12/2008 15:29
 
// Creation date: 08/12/2008 15:29
// Last updated: 11/12/2008 00:49
+
// Last updated: 20/12/2008 00:30
 
// Contributors: OlympusMons(/d!b\)
 
// Contributors: OlympusMons(/d!b\)
 
//---------------------------------------------------
 
//---------------------------------------------------
Line 352: Line 355:
  
 
//UTFamilyInfo_Human
 
//UTFamilyInfo_Human
//--Faction="Necris"        //UTFamilyInfo_Necris
 
//--Faction="Ironguard"    //UTFamilyInfo_Ironguard
 
//--Faction="TwinSouls"    //UTFamilyInfo_TwinSouls
 
//Faction="Krall"        //UTFamilyInfo_Krall
 
//Faction="Liandri"        //UTFamilyInfo_Liandri
 
 
enum KnownFactions{
 
enum KnownFactions{
 
Ironguard, //Human
 
Ironguard, //Human
Line 383: Line 381:
 
Human, //Ironguard, TwinSouls?,
 
Human, //Ironguard, TwinSouls?,
 
ClonedHuman, //juggernauts?
 
ClonedHuman, //juggernauts?
Undead,
+
UndeadHuman,
 
Robotic, //Corrupt, Liandri, Axon?
 
Robotic, //Corrupt, Liandri, Axon?
 
Alien
 
Alien
 
}
 
}
  
struct Species{
+
struct transient Species{
 
var string SpeciesName;
 
var string SpeciesName;
 
var KnownSpecies Species;
 
var KnownSpecies Species;
Line 395: Line 393:
 
};var array<Species> SpeciesTypes;
 
};var array<Species> SpeciesTypes;
  
struct SpeciesStats{
+
struct transient SpeciesStats{
 
var SpeciesTypes Faction;
 
var SpeciesTypes Faction;
 
// var class<UTFamilyInfo> Species;
 
// var class<UTFamilyInfo> Species;
var class<UCSpecies_Ability> AbilityList;
 
 
var class<UCAbility_Armour> ArmourClass;
 
var class<UCAbility_Armour> ArmourClass;
 +
 +
// var float SpeciesScale;
 +
// CharacterScale
 +
 
var float AC, //AirControl
 
var float AC, //AirControl
// Species_DAC, //DefaultAirControl
+
// DAC, //DefaultAirControl //Uses AirControl
 
GS, //GroundSpeed
 
GS, //GroundSpeed
 
WS, //WaterSpeed
 
WS, //WaterSpeed
 
JZ, //JumpZ
 
JZ, //JumpZ
 
MJB, //MultiJumpBoost
 
MJB, //MultiJumpBoost
// RDS, //ReceivedDamageScaling
+
// RDS, //ReceivedDamageScaling //Depreciated
// DS, //DamageScaling
+
// DS, //DamageScaling //Depreciated
 
AR, //AccelRate
 
AR, //AccelRate
// WP, //WalkingPct
+
// WPct, //WalkingPct //No walking Anims
// CP, //CrouchedPct
+
// CPct, //CrouchedPct
 
DS, //DodgeSpeed
 
DS, //DodgeSpeed
 
DSZ; //DodgeSpeedZ
 
DSZ; //DodgeSpeedZ
 +
//Mass,wdsf, wdsz, dz, wdz;
 
};var config array<SpeciesStats> SS;
 
};var config array<SpeciesStats> SS;
  
// local class<UCSpeciesArmourInfo> ArmourClass;
+
//var() config float AC, AS, GS, WS, JZ, RDS, DS, AR, WPct,CPct,DSF, DSZ, Mass,wdsf, wdsz, dz, wdz;
// local class<UTFamilyInfo> FamilyInfoClass;
+
//var() config int h, hm, shm, hps, beh, eh, mfs, ca, mjr,mmj,mjb, mwd;
// class<UCSpecies_AdrenMove> AdrenMovesClass;
+
//var() config int cr,pcr,phr, ch,pch,phh; //Collision
 +
// var bool bDJ, bDDJ, bBD, bC, bCL, bPI, bS, bWD, bWOL, bSF;
  
var bool bUseSpeciesArmour;
+
/** Player Class / Incarnation */
 +
var class<UCSpecies_Ability> AbilityList;
  
static function SetSpecies(class<UTFamilyInfo> FamilyInfo, UTPawn P)
+
var bool bAllowSpeciesAbilities;
{
+
var bool bAllowSpeciesArmour;
 +
var bool bAllowSpeciesStats;
 +
 
 +
static function SetSpecies(class<UTFamilyInfo> FamilyInfo, UTPawn P){
 
local int i,j;
 
local int i,j;
 +
local int TotalPossibles;
  
 
if(FamilyInfo == None)
 
if(FamilyInfo == None)
 
return;
 
return;
  
for(i = 0; i < SS.length; i++)
+
for(i = 0; i < SS.length; i++) {
{
+
if(SS[i].Species == FamilyInfo) {
if(SS[i].Species == FamilyInfo)
+
P.AirControl = P.Default.AirControl * SS[i].AC;
{
+
P.DefaultAirControl = P.Default.DefaultAirControl * SS[i].AC;
P.AirControl = P.Default.AirControl * SS[i].Species_AC;
+
P.GroundSpeed = P.Default.GroundSpeed * SS[i].GS;
P.DefaultAirControl = P.Default.DefaultAirControl * SS[i].Species_AC;
+
P.WaterSpeed = P.Default.WaterSpeed * SS[i].WS;
P.GroundSpeed = P.Default.GroundSpeed * SS[i].Species_GS;
+
P.JumpZ = P.Default.JumpZ * SS[i].JZ;
P.WaterSpeed = P.Default.WaterSpeed * SS[i].Species_WS;
+
P.MultiJumpBoost = P.Default.MultiJumpBoost * SS[i].MJB;
P.JumpZ = P.Default.JumpZ * SS[i].Species_JZ;
+
P.AccelRate = P.Default.AccelRate * SS[i].AR;
P.MultiJumpBoost = P.Default.MultiJumpBoost * SS[i].Species_MJB;
+
// P.WalkingPct = P.Default.WalkingPct * WPcnt;
P.AccelRate = P.Default.AccelRate * SS[i].Species_AR;
+
// P.CrouchedPct = P.Default.CrouchedPct * CPcnt;
// P.WalkingPct = P.Default.WalkingPct * Species_WP;
+
P.DodgeSpeed = P.Default.DodgeSpeed * SS[i].DS;
// P.CrouchedPct = P.Default.CrouchedPct * Species_CP;
+
P.DodgeSpeedZ = P.Default.DodgeSpeedZ * SS[i].DSZ;
P.DodgeSpeed = P.Default.DodgeSpeed * SS[i].Species_DS;
+
 
P.DodgeSpeedZ = P.Default.DodgeSpeedZ * SS[i].Species_DSZ;
+
`logd("Species: "$SS[i].Faction,,'UCSpecies');
 +
`logd("AirControl: "$P.AirControl$" DefaultAirControl: "$P.DefaultAirControl,,'UCSpecies');
 +
`logd("GroundSpeed: "$P.GroundSpeed$" JumpZ: "$P.JumpZ$" MultiJumpBoost: "$P.MultiJumpBoost,,'UCSpecies');
 +
`logd("DodgeSpeed: "$P.DodgeSpeed$" DodgeSpeedZ: "$P.DodgeSpeedZ,,'UCSpecies');
  
`logd("Species: "$SS[i].Species,,'SpeciesStats');
 
`logd("AirControl: "$P.AirControl$" DefaultAirControl: "$P.DefaultAirControl,,'SpeciesStats');
 
`logd("GroundSpeed: "$P.GroundSpeed$" JumpZ: "$P.JumpZ$" MultiJumpBoost: "$P.MultiJumpBoost,,'SpeciesStats');
 
`logd("DodgeSpeed: "$P.DodgeSpeed$" DodgeSpeedZ: "$P.DodgeSpeedZ,,'SpeciesStats');
 
//  MaxFallSpeed=1250.000000
 
//  MultiJumpRemaining=1
 
//  MaxMultiJump=1
 
//  bStopOnDoubleLanding=True
 
//  UnderWaterTime=20.000000
 
 
if(SS[i].Species == class'UTFamilyInfo_Krall_Male')
 
if(SS[i].Species == class'UTFamilyInfo_Krall_Male')
P.bStopOnDoubleLanding=False;
+
P.bStopOnDoubleLanding=False;
  
 
//Check INFO's for how to run from there
 
//Check INFO's for how to run from there
 
//Info.Controller
 
//Info.Controller
  
for(j = 0; j < SS[i].SpeciesFamilyInfo.length; j++)
+
TotalPossibles=SS[i].length * SpeciesTypes.length;
{
+
 
SS[i].SpeciesFamilyInfo[j]
+
//for(j = 0; j < SS[i].Faction.FamilyInfo.length; j++)
}
+
// if (SS[i].Faction.FamilyInfo[j]==SpeciesTypes)
 
}
 
}
 
}
 
}
Line 469: Line 471:
 
defaultproperties
 
defaultproperties
 
{
 
{
SpeciesTypes(0)=(Ironguard, (SpeciesFamilyInfo(0)=class'UTFamilyInfo_Ironguard_Female',SpeciesFamilyInfo(1)=class'UTFamilyInfo_Ironguard_Male'))
+
bAllowSpeciesAbilities=True
SpeciesTypes(1)=(Necris, (SpeciesFamilyInfo(0)=class'UTFamilyInfo_Necris_Female',SpeciesFamilyInfo(1)=class'UTFamilyInfo_Necris_Male'))
+
bAllowSpeciesArmour=True
SpeciesTypes(3)=(TwinSouls, (SpeciesFamilyInfo(0)=class'UTFamilyInfo_TwinSouls_Female',SpeciesFamilyInfo(1)=class'UTFamilyInfo_TwinSouls_Male'))
+
bAllowSpeciesStats=True
SpeciesTypes(3)=(Krall, (SpeciesFamilyInfo(0)=class'UTFamilyInfo_Krall_Male'))
+
SpeciesTypes(3)=(Liandri, (SpeciesFamilyInfo(0)=class'UTFamilyInfo_Liandri_Male'))
+
  
 +
//TODO: Could assign stats to Species and Faction seperate
 +
// for individual characters see customchardata
 +
SS(0)=(Faction=SpeciesTypes(0),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
 +
SS(1)=(Faction=SpeciesTypes(1),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Necris_ArmourInfo',AC=0.9,GS=1.1,WS=0.8,JZ=1.05,MJB=0.95,AR=1.0,DS=0.9,DSZ=1.1)
 +
SS(2)=(Faction=SpeciesTypes(2),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo',AC=1.1,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.0,DSZ=1.0)
 +
SS(3)=(Faction=SpeciesTypes(3),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.15,WS=1.0,JZ=0.9,MJB=1.12,AR=1.0,DS=0.94,DSZ=1.0)
 +
SS(4)=(Faction=SpeciesTypes(4),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',AC=0.9,GS=1.1,WS=1.0,JZ=0.86,MJB=1.08,AR=1.0,DS=0.86,DSZ=1.0)
 +
// SS(5)=(Species=SpeciesTypes(5),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',)
 +
// SS(5)=(Species=SpeciesTypes(6),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',)
  
//ArmourClass = class'Mutatoes.UCSpecies_Necris_ArmourInfo'
+
///UT3 Family
SS(0)=(Species=class'UTFamilyInfo_Ironguard_Female',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
//UTFamilyInfo_Necris, UTFamilyInfo_Ironguard, UTFamilyInfo_TwinSouls, UTFamilyInfo_Krall, UTFamilyInfo_Liandri
SS(1)=(Species=class'UTFamilyInfo_Ironguard_Male',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
SpeciesTypes(0)=(SpeciesName='', Species=Human, Faction=Ironguard,(FamilyInfo(0)=class'UTFamilyInfo_Ironguard_Female',FamilyInfo(1)=class'UTFamilyInfo_Ironguard_Male'))
SS(2)=(Species=class'UTFamilyInfo_Necris_Female',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Necris_ArmourInfo',AC=0.9,GS=1.1,WS=0.8,JZ=1.1,MJB=0.95,AR=1.0,DS=0.9,DSZ=1.1)
+
SpeciesTypes(1)=(SpeciesName='', Species=UndeadHuman, Faction=Necris,(FamilyInfo(0)=class'UTFamilyInfo_Necris_Female',FamilyInfo(1)=class'UTFamilyInfo_Necris_Male'))
SS(3)=(Species=class'UTFamilyInfo_Necris_Male',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Necris_ArmourInfo',AC=0.9,GS=1.1,WS=0.8,JZ=1.1,MJB=0.95,AR=1.0,DS=0.9,DSZ=1.1)
+
SpeciesTypes(2)=(SpeciesName='', Species=Human, Faction=TwinSouls,(FamilyInfo(0)=class'UTFamilyInfo_TwinSouls_Female',FamilyInfo(1)=class'UTFamilyInfo_TwinSouls_Male'))
SS(4)=(Species=class'UTFamilyInfo_TwinSouls_Female',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo',AC=1.1,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.0,DSZ=1.0)
+
SpeciesTypes(3)=(SpeciesName='', Species=Alien, Faction=Krall,(FamilyInfo(0)=class'UTFamilyInfo_Krall_Male'))
SS(5)=(Species=class'UTFamilyInfo_TwinSouls_Male',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo',AC=1.1,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.0,DSZ=1.0)
+
SpeciesTypes(4)=(SpeciesName='', Species=Robotic, Faction=Liandri,(FamilyInfo(0)=class'UTFamilyInfo_Liandri_Male'))
SS(6)=(Species=class'UTFamilyInfo_Krall_Male',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.2,WS=1.0,JZ=0.86,MJB=1.08,AR=1.0,DS=1.0,DSZ=1.0)
+
SS(7)=(Species=class'UTFamilyInfo_Liandri_Male',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',AC=0.8,GS=1.0,WS=1.0,JZ=0.88,MJB=1.06,AR=1.0,DS=1.0,DSZ=1.0)
+
  
///GOW
+
///GOW Family
//COG chars
+
// SpeciesTypes(5)=(SpeciesName='', Species=Human, Faction=COG,(FamilyInfo(0)=class'UTFamilyInfo_COG_Marcus',FamilyInfo(1)=class'UTFamilyInfo_COG_Kim',FamilyInfo(2)=class'UTFamilyInfo_COG_Gus',FamilyInfo(3)=class'UTFamilyInfo_COG_Baird',FamilyInfo(4)=class'UTFamilyInfo_COG_Dom',FamilyInfo(5)=class'UTFamilyInfo_COG_Carmine',FamilyInfo(6)=class'UTFamilyInfo_COG_Hoffman'))
// SS(10)=(Species=class'UTFamilyInfo_COG_Marcus.UTFamilyInfo_COG_Marcus',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
// SpeciesTypes(6)=(SpeciesName='', Species=Alien, Faction=Locust,(FamilyInfo(0)=class'UTFamilyInfo_Locust',FamilyInfo(1)=class'UTFamilyInfo_LocustB',FamilyInfo(2)=class'UTFamilyInfo_LocustC',FamilyInfo(3)=class'UTFamilyInfo_LocustD'))
// SS(11)=(Species=class'UTFamilyInfo_COG_Kim.UTFamilyInfo_COG_Kim',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
 
// SS(12)=(Species=class'UTFamilyInfo_COG_Gus.UTFamilyInfo_COG_Gus',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
//Egyptian Faction
// SS(13)=(Species=class'UTFamilyInfo_COG_Baird.UTFamilyInfo_COG_Baird',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
// SS(14)=(Species=class'UTFamilyInfo_COG_Dom.UTFamilyInfo_COG_Dom',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
// SS(15)=(Species=class'UTFamilyInfo_COG_Carmine.UTFamilyInfo_COG_Carmine',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
// SS(16)=(Species=class'UTFamilyInfo_COG_Hoffman.UTFamilyInfo_COG_Hoffman',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
//Locust
+
// SS(20)=(Species=class'UT3_Family_Locust.UTFamilyInfo_Locust',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
// SS(21)=(Species=class'UT3_Family_Locust.UTFamilyInfo_LocustB',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
// SS(22)=(Species=class'UT3_Family_Locust.UTFamilyInfo_LocustC',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
// SS(23)=(Species=class'UT3_Family_Locust.UTFamilyInfo_LocustD',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
+
///
+
//Egyptian
+
 
// SS(30)=(Species=class'UT3_Family_Egypt.UTFamilyInfo_Egypt',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo'AC=0.9,GS=1.1,WS=0.8,JZ=1.1,MJB=1.0,AR=1.0,DS=0.9,DSZ=1.1)
 
// SS(30)=(Species=class'UT3_Family_Egypt.UTFamilyInfo_Egypt',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo'AC=0.9,GS=1.1,WS=0.8,JZ=1.1,MJB=1.0,AR=1.0,DS=0.9,DSZ=1.1)
//Rodents
+
 
 +
//Rodent Faction
 
// SS(40)=(Species=class'UT3_Family_Rodent.UTFamilyInfo_Rodent',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.4,WS=1.2,JZ=0.86,MJB=1.08,AR=1.0,DS=1.0,DSZ=1.0)
 
// SS(40)=(Species=class'UT3_Family_Rodent.UTFamilyInfo_Rodent',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.4,WS=1.2,JZ=0.86,MJB=1.08,AR=1.0,DS=1.0,DSZ=1.0)
}</uscript>
+
}
 +
</uscript>

Revision as of 08:29, 19 December 2008

Who am I

Well Im OlympusMons thats who :P Ive done a fair bit over the years regarding making games and such. Unfortunally none of it has really been completed, mainly because of a lack of organisation on my part. Ive been an active member on the unreal wiki for some time and am glad to be contributing something back now that my skills are better.
Olympus Mons


Work Ive done

Graphics / Modelling
http://www.3dmpg.com/ is based in Perth, Australia.
Mods
Mutators
MotionBlurPC
Newtators Mutator pack for UT3
UC2004
I am inactive atm but I spent alot of time with a mod called UC2004 [[1]] which is a remake of Unreal Championship 2 for PC using the UT2004 engine.
UnrealWiki Contributions
UT3
UT2004


Work Im doing

Mods
Project: Triggerman
Gametypes
Attrition Gametype for UT3
Mutators
[ Mutatoes Mutator pack for UT3]


Skills

Modelling

Ive been modelling in 3dsmax since version 2.5, developed a small menu plugin called Quadmx7 which isnt publicly released. More recently this plugin has been upgraded for 3dsmax 9, now called QMX9.

Graphics

I learnt the Adobe Suite while doing a few TAFE courses, Photoshop and Illustrator are my strong points, I can use Premiere and Indesign also. Ive learnt alot more since doing these courses and am always looking to expand my skills. The Visual Arts and Technology course I did covered alot of stuff though not related directly to technology like design fundamentals, drawing foundations and design visualisation. There was some art critique involved but I really didnt like that as I prefer to do critiques on stuff where my knowledge is best, namely the interactive entertainment industry.

UnrealScript

For the last few years and I dabble in unreal scripting, Im really happy at where this is going and thanks to you guys Im 10x better than when I started. UT3 is proving to be really good for me and having started with UT2003 I think Ive come along way in that time, its good to finally get into alittle UE3 stuff. Its great to finally be able to see and use the upgrades to Unreal Script.


Rants

OlympusMons/Rants
(21/04/2007) Platforms and crossing the border!
(27/10/2006) Epic, UE3, UT2007 and the future...
(11/09/2006) Total Conversion Woes


Conclusion

My knowledge of games and game design is quite large but theres always more to learn. Thats what really attracted me to the wiki, this is a great place for people of all skills and skill levels to come, learn and contribute. I hope to add a little to the wiki myself and as time goes by, I hope to improve on my skills as well as help others improve on thiers.
Anyways you've probably heard enough by now.
Off you go do some modding! ;)


Contact Me

Forum

MonsOlympus on Beyondunreal Forums and Epic Games Forums

IRC

MonsOlympus on EnterTheGame and Quakenet

Email

(only via the Unreal Wiki's E-mail user feature)


Suggested Pages

Unreal Engine 3 Bug Reports

Updated:

Bug warning, red warning block links to bugID. These could be on the page with the topic so people know what to watch for, shows description. Special Category?
Dont really like the idea should perhaps hyperlink to patch with the version number in there.

UE3:Bug Reports

  • Posting structure
    • unique number (identifier) for this bug.
    • image if required
    • what is happening (specifics on what the problem is)
      • Build number (Game/Version/Patch)
      • Error message
      • Log
    • instructions on reproduction

once a bug is fixed it could be added to a fixed list or removed and details on patch which removes bug.



There are other things like the projectiles spawning from the players head, this might be considered purely graphical since the projectile would still hit at the same location if the spawn location was moved.

Im not 100% sure if UT3 bugs should be categorized or not since its debatable on what they affect, it might be best to just include them in one long list.

Custom Class

Custom UT3-specific classes


DbMutator GameX-Flow.gif

//===================================================
//	Class: UTData_FactoryReplacer
//	Creation date: 11/08/2008 15:39
//	Last updated: 16/12/2008 00:26
//	Contributors: OlympusMons(/d!b\)
//---------------------------------------------------
//===================================================
class UTData_FactoryReplacer extends UTData
	Config(FactoryReplacer);
 
/** Factory Group */
enum FactoryType{
	FT_None,
	FT_Health,
	FT_Ammo,
	FT_Armour,
	FT_Powerup,
	FT_SPowerup,
	FT_Weapon,
		FT_SWeapon,
	FT_Vehicle
};
 
/** Factories to replace on a Per Map basis - Get from global when not found*/
struct FactoryReplacer{
	var FactoryType FactoryGroup;
	var name ReplacedFactory;
	var name ReplacedWithFactory;					//TODO: ReplaceWith=None
	var string ReplacedWithFactoryPath;
	//var name NextFactory, LastFactory;
};var config array<FactoryReplacer> ReplacerFactories;
 
/** Global Factories to replace */
struct MapFactoryReplacerSet{
	var string Map;
	var array<FactoryReplace> FactoriesToReplace;	//TODO: Linked list of struct?
};var config array<MapFactoryReplacerSet> PM_FactorySet;
 
var bool bCheckMapFactoryList;				/// Map is not found on the list, create a new entry in the ini using the defaults.
var config bool bUsePerMapSettings;			/// This mutator uses Per Map Setting from the FactoryReplacer
//---------------------------------------------------
 
function int Length(){
	if(ReplacerFactories.Length > 0)
		return(ReplacerFactories.Length);
	else return(PerMapFactorySet.Length);
}
 
//TODO: Function which outs ReplacerFactories to ReplaceWith() in GameExpansion
 
//TODO: Parse commandline options for this?
function SetupPerMapData(int MapIndex, out optional string Options){
	local int iFactory;
 
	iFactory = MapFactorySettings[iMap].FactoriesToReplace.Find('ReplacedFactory', Factory.Name);
	if(iFactory == INDEX_NONE)	{
		//Moves Per Map Settings to the Global Array for use.
		ReplacerFactories[iFactory].ReplacedFactory = PM_FactorySet[iMap].FactoriesToReplace[iFactory].ReplacedFactory;
		ReplacerFactories[iFactory].ReplacedWithFactory = PM_FactorySet[iMap].FactoriesToReplace[iFactory].ReplacedWithFactory;
		ReplacerFactories[iFactory].ReplacedWithFactoryPath = PM_FactorySet[iMap].FactoriesToReplace[iFactory].ReplacedWithFactoryPath;
	}
	SaveConfig();
}
 
/** Adds Map Name only entry if none is found! */
function AddDummyMapEntry(string CurrentMap){
	local MapFactoryReplacementSettings NewPerMapFactorySet;
 
	NewPM_FactorySet.Map = CurrentMap;
	PM_FactorySet.AddItem(NewPerMapFactorySet);
//	bCheckMapFactoryList = True;
 
	SaveConfig();
}
 
function AddPerMapEntry(int iMap, PickupFactory Factory){
	local FactoryReplace NewFactoriesToReplace;
 
	if(Factory == None)		return;
 
	//Factory is not in the list, add it!
	`logd("FactoryList: "$Factory.Name$" added to Per Map Factory List!",,'FactoryReplacer');
	NewFactoriesToReplace.ReplacedFactory = Factory.Name;
	PM_FactorySet[iMap].FactoriesToReplace.AddItem(NewFactoriesToReplace);
 
	SaveConfig();
}
 
function UpdatePerMapEntry(int iMap, PickupFactory Factory){
	local int iFactory;
 
	if(Factory == None)		return;
 
	iFactory = PM_FactorySet[iMap].FactoriesToReplace.Find('ReplacedFactory', Factory.Name);
	if(iFactory == INDEX_NONE)	{
		//Factory is in the list... Change it? :S
		`logd("FactoryList: "$Factory.Name$" Changed!",,'FactoryReplacer');
		PM_FactorySet[iMap].FactoriesToReplace[iFactory].ReplacedFactory = Factory.Name;
	}
	SaveConfig();
}


//===================================================
//	Class: UTGame_Data
//	Creation date: 11/12/2008 21:03
//	Last updated: 20/12/2008 00:30
//	Contributors: OlympusMons(/d!b\)
//---------------------------------------------------
//Cutdown Version
//===================================================
class UTGame_Data extends UTData;
 
//---------------------------------------------------
var string CurrentMap;				/// Name of the Loaded Map
 
/** Factory Replacement/Per Map Factory Replacement */
var UTData_FactoryReplacer FactoryData;
var class<UTData_FactoryReplacer> FactoryReplacerDataClass< SEMI >
 
/** This mutator uses Per Map Setting from the FactoryReplacer */
var config bool bUse_PM_Set;
 
//---------------------------------------------------
 
function InitFactoryReplacer(string CurrentMap){
	local int iMap;
 
//	CurrentMap = WorldInfo.GetMapName(true);
 
	if(FactoryReplacerClass != None)		FactoryData = new(self) FactoryReplacerClass< SEMI >
	if(FactoryData == None)		return;
 
	if(FactoryData.bUsePerMapSettings)	{
		`logd("Using Per Map Factory Replacer Settings!",,'GameData');
		//TODO: Parse commandline options for this?
		iMap = FactoryReplacer.PerMapFactorySettings.Find('Map', CurrentMap);
		if(iMap != INDEX_NONE)	{
			FactoryData.SetupPerMapData(iMap);
		}else	{
			`logd("Using Global Factory Replacer Settings!",,'GameData');
			FactoryData.AddDummyMapEntry(CurrentMap);
		}
	}
 
	//FactoryReplacer.ReplacementFactories.FactoriesToReplace
}
 
//TODO: Support for any factory, vehicles, weapons, etc
function FactoryReplacement(NavigationPoint Other){
	local int j, iMap, iFactory;
 
	if(FactoryData == None)		return;
 
	if(FactoryData.FactoryGroup != 'FT_Vehicle')	{
		//Replace Factory
		for(j = 0;j < FactoryData.Length();j++)	{
			if(Other.IsA(FactoryData.ReplacerFactories[j].ReplacedFactory) &&
				!Other.IsA(FactoryData.ReplacerFactories[j].ReplacedWithFactory))
			{
				ReplaceWith(Other, FactoryData.ReplacerFactories[j].ReplacedWithFactoryPath);
				`logd("Factory: "$Other$" Replaced With: "$FactoryData.ReplacerFactories[j].ReplacedWithFactoryPath,,'FactoryReplacer');
				return false;		//NewFactory.InitializePickup();
			}
//			else if(ReplacementFactories[j].ReplacedWithFactory ~= "Remove"){
//				Factory.Deactivate();			//Deactivate Factory!
//			}
		}
 
		iMap = FactoryData.PM_FactorySet.Find('Map', CurrentMap);
		if(iMap != INDEX_NONE)	{
			//TODO: Will add entry for every factory in the map, do not want!
			iFactory = FactoryData.PM_FactorySet[iMap].FactoriesToReplace.Find('ReplacedFactory', PickupFactory(Other).Name);
			if(iFactory == INDEX_NONE)	{
				FactoryData.AddPerMapEntry(iMap, PickupFactory(Other));
			}
			else if(iFactory != INDEX_NONE)	{
				FactoryData.UpdatePerMapEntry(iMap, PickupFactory(Other));
			}
		}
	}else{
		if(UTVehicleFactory(Other) != UTVehicleFactory_TrackTurretBase(Other))
			ReplaceVehicle(UTVehicleFactory(Other)); //Mutator
//		ModifyVehicle(UTVehicle(Other));
	}
}


//===================================================
//	Class: UTWeapon_Info
//	Creation date: 13/12/2008 18:00
//	Last updated: 13/12/2008 18:00
//	Contributors: OlympusMons(/d!b\)
//---------------------------------------------------
//This class gets attached to the weapon and makes adjustments.
//===================================================
class UTWeapon_Info extends UTInfo;
 
/** Weapon class so we can check owner is right type and set vars */
var UTWeapon Weap;
 
/** Make sure we have an owner and its the right type before moving on */
simulated event PostBeginPlay(){
	if(Owner == None) Destroy();
 
	Weap = UTWeapon(Owner);
	if(Weap == None) return;
}
 
defaultproperties{
	RemoteRole=ROLE_SimulatedProxy
	bAlwaysRelevant=True
}


//===================================================
//	Class: UCSpecies
//	Creation date: 08/12/2008 15:29
//	Last updated: 20/12/2008 00:30
//	Contributors: OlympusMons(/d!b\)
//---------------------------------------------------
//===================================================
class UCSpecies extends UTInfo
	config(UCSpecies);
 
//UTFamilyInfo_Human
enum KnownFactions{
	Ironguard,		//Human
	Necris,			//Human (Black Legion) (Phayder Corporation)
	TwinSouls,		//Human
	Krall,
	Liandri,		//Robotic (Liandri Mining Corporation)
	COG,			//Human
	Locust,
	Egyptian,
	Nakhti,
	Rodent,
	Nali,
	Skaarj,
	Genmokai,
	Juggernaut,		//Human / ExoSkeleton (Geneboosted)
	Corrupt,		//Cybernetic
	Axon,			//Vehicles / first Mk3 Armour
	ThunderCrash,	//Malcolm, Othello, etc
	Mercenary,		//Blood Reavers,
	Hellions,		//Punks
	Nightmare		//Necris experiment?
}
 
enum KnownSpecies{
	Human,			//Ironguard, TwinSouls?,
	ClonedHuman,	//juggernauts?
	UndeadHuman,
	Robotic,		//Corrupt, Liandri, Axon?
	Alien
}
 
struct transient Species{
	var string SpeciesName;
	var KnownSpecies Species;
	var KnownFactions Faction;
	var array< class<UTFamilyInfo> > FamilyInfo;
};var array<Species> SpeciesTypes;
 
struct transient SpeciesStats{
	var SpeciesTypes Faction;
//	var class<UTFamilyInfo> Species;
	var class<UCAbility_Armour> ArmourClass< SEMI >
 
	//	var float SpeciesScale;
	//	CharacterScale
 
	var float	AC,			//AirControl
//				DAC,		//DefaultAirControl			//Uses AirControl
				GS,			//GroundSpeed
				WS,			//WaterSpeed
				JZ,			//JumpZ
				MJB,		//MultiJumpBoost
//				RDS,		//ReceivedDamageScaling		//Depreciated
//				DS,			//DamageScaling				//Depreciated
				AR,			//AccelRate
//				WPct,			//WalkingPct				//No walking Anims
//				CPct,			//CrouchedPct
				DS,			//DodgeSpeed
				DSZ;		//DodgeSpeedZ
				//Mass,wdsf, wdsz, dz, wdz;
};var config array<SpeciesStats> SS;
 
//var() config float AC, AS, GS, WS, JZ, RDS, DS, AR, WPct,CPct,DSF, DSZ, Mass,wdsf, wdsz, dz, wdz;
//var() config int h, hm, shm, hps, beh, eh, mfs, ca, mjr,mmj,mjb, mwd;
//var() config int cr,pcr,phr, ch,pch,phh;		//Collision
//	var bool bDJ, bDDJ, bBD, bC, bCL, bPI, bS, bWD, bWOL, bSF;
 
/** Player Class / Incarnation */
var class<UCSpecies_Ability> AbilityList;
 
var bool bAllowSpeciesAbilities;
var bool bAllowSpeciesArmour;
var bool bAllowSpeciesStats;
 
static function SetSpecies(class<UTFamilyInfo> FamilyInfo, UTPawn P){
	local int i,j;
	local int TotalPossibles;
 
	if(FamilyInfo == None)
		return;
 
	for(i = 0; i < SS.length; i++)	{
		if(SS[i].Species == FamilyInfo)		{
			P.AirControl = P.Default.AirControl * SS[i].AC;
			P.DefaultAirControl = P.Default.DefaultAirControl * SS[i].AC;
			P.GroundSpeed = P.Default.GroundSpeed * SS[i].GS;
			P.WaterSpeed = P.Default.WaterSpeed * SS[i].WS;
			P.JumpZ = P.Default.JumpZ * SS[i].JZ;
			P.MultiJumpBoost = P.Default.MultiJumpBoost * SS[i].MJB;
			P.AccelRate = P.Default.AccelRate * SS[i].AR;
//			P.WalkingPct = P.Default.WalkingPct * WPcnt;
//			P.CrouchedPct = P.Default.CrouchedPct * CPcnt;
			P.DodgeSpeed = P.Default.DodgeSpeed * SS[i].DS;
			P.DodgeSpeedZ = P.Default.DodgeSpeedZ * SS[i].DSZ;
 
			`logd("Species: "$SS[i].Faction,,'UCSpecies');
			`logd("AirControl: "$P.AirControl$" DefaultAirControl: "$P.DefaultAirControl,,'UCSpecies');
			`logd("GroundSpeed: "$P.GroundSpeed$" JumpZ: "$P.JumpZ$" MultiJumpBoost: "$P.MultiJumpBoost,,'UCSpecies');
			`logd("DodgeSpeed: "$P.DodgeSpeed$" DodgeSpeedZ: "$P.DodgeSpeedZ,,'UCSpecies');
 
			if(SS[i].Species == class'UTFamilyInfo_Krall_Male')
				P.bStopOnDoubleLanding=False;
 
			//Check INFO's for how to run from there
			//Info.Controller
 
			TotalPossibles=SS[i].length * SpeciesTypes.length;
 
			//for(j = 0; j < SS[i].Faction.FamilyInfo.length; j++)
			//	if (SS[i].Faction.FamilyInfo[j]==SpeciesTypes)
		}
	}
}
 
defaultproperties
{
	bAllowSpeciesAbilities=True
	bAllowSpeciesArmour=True
	bAllowSpeciesStats=True
 
	//TODO: Could assign stats to Species and Faction seperate
	// for individual characters see customchardata
	SS(0)=(Faction=SpeciesTypes(0),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
	SS(1)=(Faction=SpeciesTypes(1),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Necris_ArmourInfo',AC=0.9,GS=1.1,WS=0.8,JZ=1.05,MJB=0.95,AR=1.0,DS=0.9,DSZ=1.1)
	SS(2)=(Faction=SpeciesTypes(2),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo',AC=1.1,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.0,DSZ=1.0)
	SS(3)=(Faction=SpeciesTypes(3),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.15,WS=1.0,JZ=0.9,MJB=1.12,AR=1.0,DS=0.94,DSZ=1.0)
	SS(4)=(Faction=SpeciesTypes(4),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',AC=0.9,GS=1.1,WS=1.0,JZ=0.86,MJB=1.08,AR=1.0,DS=0.86,DSZ=1.0)
//	SS(5)=(Species=SpeciesTypes(5),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',)
//	SS(5)=(Species=SpeciesTypes(6),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',)
 
///UT3 Family
	//UTFamilyInfo_Necris, UTFamilyInfo_Ironguard, UTFamilyInfo_TwinSouls, UTFamilyInfo_Krall, UTFamilyInfo_Liandri
	SpeciesTypes(0)=(SpeciesName='', Species=Human, Faction=Ironguard,(FamilyInfo(0)=class'UTFamilyInfo_Ironguard_Female',FamilyInfo(1)=class'UTFamilyInfo_Ironguard_Male'))
	SpeciesTypes(1)=(SpeciesName='', Species=UndeadHuman, Faction=Necris,(FamilyInfo(0)=class'UTFamilyInfo_Necris_Female',FamilyInfo(1)=class'UTFamilyInfo_Necris_Male'))
	SpeciesTypes(2)=(SpeciesName='', Species=Human, Faction=TwinSouls,(FamilyInfo(0)=class'UTFamilyInfo_TwinSouls_Female',FamilyInfo(1)=class'UTFamilyInfo_TwinSouls_Male'))
	SpeciesTypes(3)=(SpeciesName='', Species=Alien, Faction=Krall,(FamilyInfo(0)=class'UTFamilyInfo_Krall_Male'))
	SpeciesTypes(4)=(SpeciesName='', Species=Robotic, Faction=Liandri,(FamilyInfo(0)=class'UTFamilyInfo_Liandri_Male'))
 
///GOW Family
//	SpeciesTypes(5)=(SpeciesName='', Species=Human, Faction=COG,(FamilyInfo(0)=class'UTFamilyInfo_COG_Marcus',FamilyInfo(1)=class'UTFamilyInfo_COG_Kim',FamilyInfo(2)=class'UTFamilyInfo_COG_Gus',FamilyInfo(3)=class'UTFamilyInfo_COG_Baird',FamilyInfo(4)=class'UTFamilyInfo_COG_Dom',FamilyInfo(5)=class'UTFamilyInfo_COG_Carmine',FamilyInfo(6)=class'UTFamilyInfo_COG_Hoffman'))
//	SpeciesTypes(6)=(SpeciesName='',  Species=Alien, Faction=Locust,(FamilyInfo(0)=class'UTFamilyInfo_Locust',FamilyInfo(1)=class'UTFamilyInfo_LocustB',FamilyInfo(2)=class'UTFamilyInfo_LocustC',FamilyInfo(3)=class'UTFamilyInfo_LocustD'))
 
//Egyptian Faction
//	SS(30)=(Species=class'UT3_Family_Egypt.UTFamilyInfo_Egypt',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo'AC=0.9,GS=1.1,WS=0.8,JZ=1.1,MJB=1.0,AR=1.0,DS=0.9,DSZ=1.1)
 
//Rodent Faction
//	SS(40)=(Species=class'UT3_Family_Rodent.UTFamilyInfo_Rodent',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.4,WS=1.2,JZ=0.86,MJB=1.08,AR=1.0,DS=1.0,DSZ=1.0)
}