RuneI
Class Berserker

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

class Berserker
extends RuneI.Viking

//============================================================================= // Berserker. //=============================================================================
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	// Berserker.
00003	//=============================================================================
00004	class Berserker expands Viking;
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.000000
00223	     AmbientFightSoundDelay=6.000000
00224	     StartShield=None
00225	     CombatRange=1.000000
00226	     GroundSpeed=300.000000
00227	     WalkingSpeed=150.000000
00228	     Health=150
00229	     BodyPartHealth(1)=125
00230	     BodyPartHealth(3)=125
00231	     BodyPartHealth(5)=100
00232	     HitSound1=Sound'CreaturesSnd.Vikings.berzerkhit01'
00233	     HitSound2=Sound'CreaturesSnd.Vikings.berzerkhit02'
00234	     HitSound3=Sound'CreaturesSnd.Vikings.berzerkhit03'
00235	     Die=Sound'CreaturesSnd.Vikings.berzerkdeath01'
00236	     Die2=Sound'CreaturesSnd.Vikings.berzerkdeath02'
00237	     Die3=Sound'CreaturesSnd.Vikings.berzerkdeath03'
00238	     LandGrunt=Sound'CreaturesSnd.Vikings.berzerkhit01'
00239	}

End Source Code