/* -------------------------------------------------------------- KF_StorySquadDesigner -------------------------------------------------------------- This actor provides level designers with a method of settings up pre-defined squads of Monsters for story missions. Squads can be referenced in either KF_StoryZombeVolumes or KF_StoryWaveDesigners. Author : Alex Quick -------------------------------------------------------------- */ class KF_StorySquadDesigner extends Info dependson(KFStoryGameInfo) hidecategories(Collision,Force,Karma,Lighting,LightColor,Sound,Events,Movement) placeable; var() array Squads; var bool bUseDefaultSquads; /* In case we want to just use whatever is in the KF Gametype instead of having to set up custom monster squads */ function FillSquadsFromGameType() { local int i,idx; local KFGameType KFGI; local string SquadString; local array ZEDTypes; local string NewZEDType; local int SplitSize; local string LeftHalf; local int Squadidx; local bool bExistsAlready; KFGI = KFGameType(Level.Game); if(KFGI == none) { return; } SplitSize = 2; for(i = 0 ; i < KFGI.MonsterSquad.length ; i ++) { Squads.length = Squads.length + 1; Squads[Squads.length-1].Squad_Name = KFGI.MonsterSquad[i] ; SquadString = Squads[Squads.length-1].Squad_Name ; while(Len(SquadString) >= SplitSize) { NewZEDType = Left(SquadString,SplitSize); ZEDTypes[ZEDTypes.length] = NewZEDType; Divide(SquadString,NewZEDType,LeftHalf,SquadString); } for(idx = 0 ; idx < ZEDTypes.length ; idx ++) { bExistsAlready = false; for(Squadidx = 0 ; SquadIdx < Squads[Squads.length-1].Squad_ZEDS.length ; SquadIdx ++) { if(string(Squads[Squads.length-1].Squad_ZEDs[SquadIdx].ZEDClass) == ZEDTypes[idx]) { bExistsAlready = true; break; } } if(bExistsAlready) { continue; } else { Squads[Squads.length-1].Squad_ZEDs.length = Squads[Squads.length-1].Squad_ZEDs.length + 1; Squads[Squads.length-1].Squad_ZEDs[Squads[Squads.length-1].Squad_ZEDs.length -1].ZEDClass = GetAssociatedZEDClass(Right(ZEDTypes[idx],1)) ; Squads[Squads.length-1].Squad_ZEDs[Squads[Squads.length-1].Squad_ZEDs.length -1].NumToSpawn = int(Left(ZEDTypes[idx],1)) ; } } ZEDTypes.length = 0; } } /* Returns the class of the ZED associated with the supplied letter ... a result of the delightfully overblown Monster Squad system from UT2k4s invasion gametype where a Monster Class is a letter! and a Squad is a bunch of letters! And a Wave is a bunch of bits that represent a bunch of binary which represents a bunch of letters which represent a bunch of Monsters! HERPdeDERPaHURRRRDURRRR ! */ function class GetAssociatedZEDClass( string Letter) { local KFGameType KFGI; local int i; local class ZEDClassType; local string MonsterID; KFGI = KFGameType(Level.Game); if(KFGI == none) { return none; } for(i = 0 ; i < KFGI.MonsterCollection.default.StandardMonsterClasses.length ; i ++) { MonsterID = KFGI.MonsterCollection.default.StandardMonsterClasses[i].MID ; if(MonsterID == Letter) { ZEDClassType = class(DynamicLoadObject(KFGI.MonsterCollection.default.StandardMonsterClasses[i].MClassName, class'Class')) ; // log(" The Monster class associated with the letter : "@Letter@"is : "@ZEDClassType.default.menuname,'Story_Debug'); return ZEDClassType; } } } defaultproperties { DrawScale = 0.5 Texture = Texture'KFStoryGame_Tex.Editor.KF_StorySquads_Ico' }