SarkBall
Class SarkBallBotBerserker

source: c:\runehov\SarkBall\Classes\SarkBallBotBerserker.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Pawn
         |
         +--RuneI.ScriptPawn
            |
            +--SarkBall.SarkBallBot
               |
               +--SarkBall.SarkBallBotBerserker
Direct Known Subclasses:None

class SarkBallBotBerserker
extends SarkBall.SarkBallBot

//----------------------------------------------------------- // //-----------------------------------------------------------
States
Fighting

Function Summary
 void ApplyGoreCap(int BodyPart)
     
//============================================================
//
// ApplyGoreCap
//
//============================================================
 int BodyPartForPolyGroup(int polygroup)
     
//============================================================
//
// BodyPartForPolyGroup
//
//============================================================
 bool CanPickup(Inventory item)
     
//============================================================
//
// CanPickup
//
// Let's pawn dictate what it can pick up
//============================================================
 Texture PainSkin(int BodyPart)
     
//============================================================
//
// PainSkin
//
// returns the pain skin for a given polygroup
//============================================================


State Fighting Function Summary
 void Timer()
     
// Determine AttackAction based upon enemy movement and position



Source Code


00001	//-----------------------------------------------------------
00002	//
00003	//-----------------------------------------------------------
00004	class SarkBallBotBerserker expands SarkBallBot;
00005	
00006	//============================================================
00007	//
00008	// PainSkin
00009	//
00010	// returns the pain skin for a given polygroup
00011	//============================================================
00012	function Texture PainSkin(int BodyPart)
00013	{
00014	     switch(BodyPart)
00015	     {
00016	          case BODYPART_TORSO:
00017	               SkelGroupSkins[4] = Texture'players.ragnarb_bodypain';
00018	               break;
00019	          case BODYPART_HEAD:
00020	               SkelGroupSkins[1] = Texture'players.ragnarb_headpain';
00021	               SkelGroupSkins[2] = Texture'players.ragnarb_headpain';
00022	               SkelGroupSkins[3] = Texture'players.ragnarb_headpain';
00023	               SkelGroupSkins[7] = Texture'players.ragnarb_headpain';
00024	               SkelGroupSkins[14] = Texture'players.ragnarb_headpain';
00025	               break;
00026	          case BODYPART_LARM1:
00027	               SkelGroupSkins[11] = Texture'players.ragnarb_armspain';
00028	               SkelGroupSkins[13] = Texture'players.ragnarb_armspain';
00029	               break;
00030	          case BODYPART_RARM1:
00031	               SkelGroupSkins[10] = Texture'players.ragnarb_armspain';
00032	               SkelGroupSkins[12] = Texture'players.ragnarb_armspain';
00033	               break;
00034	          case BODYPART_LLEG1:
00035	               SkelGroupSkins[6] = Texture'players.ragnarb_legpain';
00036	               break;
00037	          case BODYPART_RLEG1:
00038	               SkelGroupSkins[5] = Texture'players.ragnarb_legpain';
00039	               break;
00040	     }
00041	     return None;
00042	}
00043	
00044	//============================================================
00045	//
00046	// BodyPartForPolyGroup
00047	//
00048	//============================================================
00049	function int BodyPartForPolyGroup(int polygroup)
00050	{
00051	     switch(polygroup)
00052	     {
00053	          case 1: case 2: case 3: case 14:     return BODYPART_HEAD;
00054	          case 13:                                   return BODYPART_LARM1;
00055	          case 12:                                   return BODYPART_RARM1;
00056	          case 6:                                        return BODYPART_LLEG1;
00057	          case 5:                                        return BODYPART_RLEG1;
00058	          case 4: case 7: case 8: case 9:
00059	          case 10: case 11: case 15:               return BODYPART_TORSO;
00060	     }
00061	     return BODYPART_BODY;
00062	}
00063	
00064	//============================================================
00065	//
00066	// ApplyGoreCap
00067	//
00068	//============================================================
00069	function ApplyGoreCap(int BodyPart)
00070	{
00071	     switch(BodyPart)
00072	     {
00073	          case BODYPART_LARM1:
00074	               SkelGroupSkins[9] = Texture'runefx.gore_bone';
00075	               SkelGroupFlags[9] = SkelGroupFlags[9] & ~POLYFLAG_INVISIBLE;
00076	               break;
00077	          case BODYPART_RARM1:
00078	               SkelGroupSkins[8] = Texture'runefx.gore_bone';
00079	               SkelGroupFlags[8] = SkelGroupFlags[8] & ~POLYFLAG_INVISIBLE;
00080	               break;
00081	          case BODYPART_HEAD:
00082	               SkelGroupSkins[15] = Texture'players.ragnarb_neckgore';
00083	               SkelGroupFlags[15] = SkelGroupFlags[15] & ~POLYFLAG_INVISIBLE;
00084	               break;
00085	     }
00086	}
00087	
00088	//================================================
00089	//
00090	// SeveredLimbClass
00091	//
00092	//================================================
00093	function class<Actor> SeveredLimbClass(int BodyPart)
00094	{
00095	     switch(BodyPart)
00096	     {
00097	          case BODYPART_LARM1:
00098	               return class'BerserkerLArm';
00099	          case BODYPART_RARM1:
00100	               return class'BerserkerRArm';
00101	          case BODYPART_HEAD:
00102	               return class'BerserkerHead';
00103	               break;
00104	     }
00105	
00106	     return None;
00107	}
00108	
00109	//============================================================
00110	//
00111	// CanPickup
00112	//
00113	// Let's pawn dictate what it can pick up
00114	//============================================================
00115	function bool CanPickup(Inventory item)
00116	{
00117	     if (Health <= 0)
00118	          return false;
00119	
00120	     if (item.IsA('Weapon') && (BodyPartHealth[BODYPART_RARM1] > 0) && (Weapon == None))
00121	     {
00122	          return (item.IsA('axe') || item.IsA('hammer') || item.IsA('Sword') || item.IsA('Torch'));
00123	     }
00124	     else if (item.IsA('Shield') && (BodyPartHealth[BODYPART_LARM1] > 0) && (Shield == None))
00125	     {
00126	          return false;
00127	     }
00128	     return(false);
00129	}
00130	
00131	//================================================
00132	//
00133	// Fighting
00134	//
00135	//================================================
00136	State Fighting
00137	{
00138	ignores EnemyAcquired;
00139	
00140	     // Determine AttackAction based upon enemy movement and position
00141	     function Timer()
00142	     {
00143	     }
00144	
00145	Fight:
00146	     if ( !ValidEnemy() )
00147	          Goto('BackFromSubState');
00148	
00149	     GetEnemyProximity();
00150	     
00151	     // Attack if close enough
00152	     if(Weapon != None && InMeleeRange(Enemy) || (EnemyMovement == MOVE_CLOSER && EnemyDist < MeleeRange * 2.5))
00153	     {
00154	          WeaponActivate();
00155	          Weapon.EnableSwipeTrail();
00156	
00157	          PlayAnim(Weapon.A_AttackA, 1.0, 0.1);
00158	          FinishAnim();
00159	
00160	          if(Weapon.A_AttackB != 'None' && FRand() < 0.75)
00161	          {
00162	               ClearSwipeArray();
00163	               PlayAnim(Weapon.A_AttackB, 1.0, 0.01);
00164	               FinishAnim();
00165	
00166	               if(Weapon.A_AttackC != 'None' && FRand() < 0.5)
00167	               {
00168	                    ClearSwipeArray();
00169	                    PlayAnim(Weapon.A_AttackC, 1.0, 0.01);
00170	                    FinishAnim();
00171	                    
00172	                    WeaponDeactivate();
00173	
00174	                    if(Weapon.A_AttackCReturn != 'None')
00175	                    {
00176	                         PlayAnim(Weapon.A_AttackCReturn, 1.0, 0.1);
00177	                         FinishAnim();
00178	                    }
00179	               }
00180	               else
00181	               { // B-Return
00182	                    WeaponDeactivate();
00183	
00184	                    if(Weapon.A_AttackBReturn != 'None')
00185	                    {
00186	                         PlayAnim(Weapon.A_AttackBReturn, 1.0, 0.1);
00187	                         FinishAnim();
00188	                    }
00189	               }
00190	          }
00191	          else
00192	          { // A-Return
00193	               WeaponDeactivate();
00194	
00195	               if(Weapon.A_AttackAReturn != 'None')
00196	               {
00197	                    PlayAnim(Weapon.A_AttackAReturn, 1.0, 0.1);
00198	                    FinishAnim();
00199	               }
00200	          }
00201	
00202	          Weapon.DisableSwipeTrail();          
00203	          Sleep(TimeBetweenAttacks);
00204	     }
00205	     if(InCombatRange(Enemy))
00206	     {
00207	          Sleep(0.05);
00208	          Goto('Begin');
00209	     }
00210	
00211	}
00212	
00213	defaultproperties
00214	{
00215	    AcquireSound=Sound'CreaturesSnd.Vikings.berzerksee01'
00216	    AmbientWaitSounds(0)=Sound'CreaturesSnd.Vikings.berzerkambient01'
00217	    AmbientWaitSounds(1)=Sound'CreaturesSnd.Vikings.berzerkambient02'
00218	    AmbientWaitSounds(2)=Sound'CreaturesSnd.Vikings.berzerkambient03'
00219	    AmbientFightSounds(0)=Sound'CreaturesSnd.Vikings.berzerkattack01'
00220	    AmbientFightSounds(1)=Sound'CreaturesSnd.Vikings.berzerkattack02'
00221	    AmbientFightSounds(2)=Sound'CreaturesSnd.Vikings.berzerkattack03'
00222	    AmbientWaitSoundDelay=10.00
00223	    AmbientFightSoundDelay=6.00
00224	    CarcassType=Class'RuneI.PlayerBerserkerCarcass'
00225	    CombatRange=1.00
00226	    GroundSpeed=300.00
00227	    WalkingSpeed=150.00
00228	    Die=Sound'CreaturesSnd.Vikings.berzerkdeath01'
00229	    Die2=Sound'CreaturesSnd.Vikings.berzerkdeath02'
00230	    Die3=Sound'CreaturesSnd.Vikings.berzerkdeath03'
00231	    LandGrunt=Sound'CreaturesSnd.Vikings.berzerkhit01'
00232	    SkelMesh=2
00233	    SkelGroupSkins(0)=Texture'Players.Ragnarragd_arms'
00234	    SkelGroupSkins(1)=Texture'Players.Ragnarb_head'
00235	    SkelGroupSkins(2)=Texture'Players.Ragnarb_head'
00236	    SkelGroupSkins(3)=Texture'Players.Ragnarb_head'
00237	    SkelGroupSkins(4)=Texture'Players.Ragnarb_body'
00238	    SkelGroupSkins(5)=Texture'Players.Ragnarb_leg'
00239	    SkelGroupSkins(6)=Texture'Players.Ragnarb_leg'
00240	    SkelGroupSkins(7)=Texture'Players.Ragnarb_head'
00241	    SkelGroupSkins(9)=Texture'Players.Ragnarragd_arms'
00242	    SkelGroupSkins(10)=Texture'Players.Ragnarb_arms'
00243	    SkelGroupSkins(11)=Texture'Players.Ragnarb_arms'
00244	    SkelGroupSkins(12)=Texture'Players.Ragnarb_arms'
00245	    SkelGroupSkins(13)=Texture'Players.Ragnarb_arms'
00246	    SkelGroupSkins(14)=Texture'Players.Ragnarb_head'
00247	    SkelGroupSkins(15)=Texture'Players.Ragnarb_neckgore'
00248	}

End Source Code