Mesh "Commando": "CockGunL" vs. "CockGun"

Search and find cool Skins, or introduce your own ones!
User avatar
Barbie
Godlike
Posts: 2135
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Mesh "Commando": "CockGunL" vs. "CockGun"

Post by Barbie » Mon Jul 17, 2017 12:15 am

The subject already tells it: is there any difference between the animations "CockGunL" and "CockGun" in the mesh of "Botpack.Commando"? As the name suggests, it can be the same animation just mirrored (L=left weapon hand), but by viewing them I cannot notice any difference.

(Background: I'm just coding a fix for "Humane.Humangrant" and rewriting the function PlayWaiting().)
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett

User avatar
Dr. Walter
Novice
Posts: 20
Joined: Sat May 17, 2014 11:03 pm
Personal rank: living failure
Location: ∞ + 1

Re: Mesh "Commando": "CockGunL" vs. "CockGun"

Post by Dr. Walter » Mon Jul 17, 2017 1:33 am

.
Last edited by Dr. Walter on Sun Jan 17, 2021 5:38 am, edited 1 time in total.
* ... get dunked on

User avatar
Barbie
Godlike
Posts: 2135
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: Mesh "Commando": "CockGunL" vs. "CockGun"

Post by Barbie » Mon Jul 17, 2017 3:12 am

Ah, thanks, that has helped - now where I know to put attention watching the animations I notice the difference, yes. :)
BTW: Wouldn't it be nice to have that description in the wiki somewhere? For me these naming conventions are not self explanatory.
Dr. Walter wrote:I assume this "Humane.Humangrant" is a ScriptedPawn conversion of a player model?
It is a bad coded subclass of SkaarjTrooper, see thread Invisible weapons in MH-Treasure2DXfixed. Instead of fixing that code I wrote a new sub class of SkaarjTrooper and put that into the package SBHumaneFixes. With that I can replace Humane.Humangrant, Humane.Recon and Humane.gunner with my classes (manually or by my MapPatcher). I will soon publish this helper library SBHumaneFixes; comments and improvements to the current version are welcome:
Code preview
Show

Code: Select all

/******************************************************************************
A fix for package Humane.u: "Humangrant" (and the derived Gunner and Recon) are
calling parent's code what gets wired in Function Startup.BeginState().

How to use: Replace all "Humangrant", "Gunner" and "Recon" in a map with
"HumangrantSB", "GunnerSB" and "ReconSB".
The package "Humane.u" is still needed for the weapons.

16 Jul 2017, SeriousBarbie
******************************************************************************/
class HumangrantSB expands SkaarjTrooper;

#exec OBJ LOAD File="..\System\Humane.u"
#exec OBJ LOAD File="..\System\BotPack.u"
#exec MESH ORIGIN MESH=commando X=0 Y=0 Z=0


var(Sounds) sound BreathAgain;


function PlayTurning() {
	BaseEyeHeight = Default.BaseEyeHeight;
	if ( (Weapon == None) || (Weapon.Mass < 20) )
		PlayAnim('TurnSM', 0.3, 0.3);
	else
		PlayAnim('TurnLG', 0.3, 0.3);
}


function PostBeginPlay() {
	if (bButtonPusher && Mesh == LodMesh'Botpack.Commando')
		bButtonPusher = false; // no animations given in 'Botpack.Commando'
	super.PostBeginPlay();
}


function TweenTo(float tweentime) {
	if (bFakeDeath)
		return;
	if (Region.Zone.bWaterZone)
	{
		TweenToSwimming(tweentime);
		return;
	}
	TweenAnim('breath2l', tweentime);
}


function TweenToPatrolStop(float tweentime) {
	TweenTo(tweentime);
}


function TweenToWaiting(float tweentime) {
	TweenTo(tweentime);
}


function PlayTakeHit(float tweentime, vector HitLoc, int damage) {
	if ( (Velocity.Z > 120) && (Health < 0.4 * Default.Health) && (FRand() < 0.33) )
		PlayAnim('Dead2',0.7);
	else if (AnimSequence != 'Dead2')
		Super(ScriptedPawn).PlayTakeHit(tweentime, HitLoc, damage);
}


function PlayAnimCock(float animspeed) {

	SetAlertness(-0.1);
	if ((Weapon == None) || (Weapon.Mass < 20))
		PlayAnim('CockGun', AnimSpeed, 0.7);
	else
		PlayAnim('CockGunL', AnimSpeed, 0.7);
	PlayCock();
}


function PlayAnimBreath(float animspeed) {
local name AnimName;

	SetAlertness(0.0);
	if (FRand() > 0.5)
		AnimName = 'Breath1';
	else
		AnimName = 'Breath2';

	LoopAnim(AnimName, AnimSpeed, 0.5);
	if ( ! bQuiet)
		PlaySound(BreathAgain, SLOT_Talk);
}


function PlayAnimChat(float animspeed) {
local name AnimName;

	SetAlertness(-0.3);
	if (FRand() > 0.5)
		AnimName = 'Chat1';
	else
		AnimName = 'Chat2';
	LoopAnim(AnimName, AnimSpeed, 0.5);
	if ( ! bQuiet)
		PlaySound(Roam, SLOT_Talk);
}


function PlayAnimLook(float animspeed) {
local name AnimName;

	SetAlertness(0.5);
	if (FRand() > 0.5)
		AnimName = 'look';
	else
		AnimName = 'lookL';
	LoopAnim(AnimName, AnimSpeed, 0.5);
}


function PlayCock() {
// overriding needed because SkaarjTrooper.PlayCock() has a bug: Checking SelectSound but playing CockingSound...
	if (Weapon != None)
	{
		if (Weapon.CockingSound != None)
			PlaySound(Weapon.CockingSound, SLOT_Interact,,,700);
		else if (Weapon.SelectSound != None)
			PlaySound(Weapon.SelectSound, SLOT_Interact,,,700);
	}
}


function bool IsBreathing() {
	Return (AnimSequence == 'Breath1' || AnimSequence == 'Breath2');
}


function bool IsChatting() {
	Return (AnimSequence == 'Chat1' || AnimSequence == 'Chat2');
}


function bool IsLooking() {
	Return (AnimSequence == 'look' || AnimSequence == 'lookL');
}


//function Name GetNextAnimation


function PlayWaiting() {
// last defined in Skaarj.uc
local float decision;
local float animspeed;

	if (Region.Zone.bWaterZone)
	{
		PlaySwimming();
		return;
	}
	if (bFakeDeath)
		return;
	if (bButtonPusher)
	{
		PushButtons();
		return;
	}

	animspeed = 0.3 + 0.6 * FRand(); //vary speed
	decision = FRand();

	if (decision < 0.25)
	{
		PlayAnimBreath(AnimSpeed);
	}
	else if (decision < 0.5)
	{
		PlayAnimCock(AnimSpeed);
	}
	else if (decision < 0.75)
	{
		PlayAnimChat(AnimSpeed);
	}
	else
		PlayAnimLook(AnimSpeed);
}


function TweenToRunning(float tweentime) {

	bButtonPusher = false;
	bFakeDeath = false;
	if (Region.Zone.bWaterZone)
	{
		TweenToSwimming(tweentime);
		return;
	}
	if ( (AnimSequence == 'chat1') && (AnimFrame > 0.8) )
	{
		SetFall();
		GotoState('FallingState', 'RiseUp');
	}
	else if (((AnimSequence != 'StillLgFr')) || ! bAnimLoop)
		TweenAnim('RunLg', tweentime);
}


function Shield() {
	return;
}


function TryToDuck(vector duckDir, bool bReversed)
{
	local vector HitLocation, HitNormal, Extent;
	local bool duckLeft;
	local actor HitActor;
	local float decision;

	if ( (FRand() < 0.4) || (VSize(Velocity) < 50) )
	{
		Shield();
		return;
	}

	duckDir.Z = 0;
	duckLeft = !bReversed;

	Extent.X = CollisionRadius;
	Extent.Y = CollisionRadius;
	Extent.Z = CollisionHeight;
	HitActor = Trace(HitLocation, HitNormal, Location + 200 * duckDir, Location, false, Extent);
	if (HitActor != None)
	{
		duckLeft = !duckLeft;
		duckDir *= -1;
		HitActor = Trace(HitLocation, HitNormal, Location + 200 * duckDir, Location, false, Extent);
	}
	if (HitActor != None)
	{
		Shield();
		return;
	}

	HitActor = Trace(HitLocation, HitNormal, Location + 200 * duckDir - MaxStepHeight * vect(0,0,1), Location + 200 * duckDir, false, Extent);
	if (HitActor == None)
	{
		Shield();
		return;
	}

	SetFall();
	if ( duckLeft )
		PlayAnim('DuckWlkL', 1.35);
	else
		PlayAnim('DuckWlkl', 1.35);
	Velocity = duckDir * GroundSpeed;
	Velocity.Z = 200;
	SetPhysics(PHYS_Falling);
	GotoState('FallingState','Ducking');
}

function bool CanFireAtEnemy()
{
	local vector HitLocation, HitNormal,X,Y,Z, projStart, EnemyDir, EnemyUp;
	local actor HitActor;
	local float EnemyDist;

	EnemyDir = Enemy.Location - Location;
	EnemyDist = VSize(EnemyDir);
	EnemyUp = Enemy.CollisionHeight * vect(0,0,0.8);
	if ( EnemyDist > 300 )
	{
		EnemyDir = 300 * EnemyDir/EnemyDist;
		EnemyUp = 300 * EnemyUp/EnemyDist;
	}

	if ( Weapon == None )
		return false;

	GetAxes(Rotation,X,Y,Z);
	projStart = Location + Weapon.CalcDrawOffset() + Weapon.FireOffset.X * X + 1.2 * Weapon.FireOffset.Y * Y + Weapon.FireOffset.Z * Z;
	if ( Weapon.IsA('ASMD') || Weapon.IsA('Minigun') || Weapon.IsA('Rifle') || Weapon.IsA('ShockRifle') || Weapon.IsA('minigun2') || Weapon.IsA('SniperRifle')) //instant hit
		HitActor = Trace(HitLocation, HitNormal, Enemy.Location + EnemyUp, projStart, true);
	else
		HitActor = Trace(HitLocation, HitNormal, projStart + EnemyDir + EnemyUp, projStart, true);

	if ( HitActor == Enemy )
		return true;
	if ( (HitActor != None) && (VSize(HitLocation - Location) < 200) )
		return false;
	if ( (Pawn(HitActor) != None) && (AttitudeTo(Pawn(HitActor)) > ATTITUDE_Ignore) )
		return false;

	return true;
}

//Skaarj animations
function PlayPatrolStop()
{
	local float decision;
	if (Region.Zone.bWaterZone)
	{
		PlaySwimming();
		return;
	}
	if ( bButtonPusher )
	{
		PushButtons();
		return;
	}

	SetAlertness(0.2);
	LoopAnim('LookL', 0.3 + 0.6 * FRand());
}

function PlayChallenge()
{
	if (Region.Zone.bWaterZone)
	{
		PlaySwimming();
		return;
	}
	if ( TryToCrouch() )
	{
		//TweenAnim('Duck', 0.12);
		TweenAnim('Chat2', 0.12);
		return;
	}
	PlayThreateningSound();
	PlayAnim('StillFrRp', 0.8 + 0.5 * FRand(), 0.1);
}

function PlayRunning()
{
	local float strafeMag;
	local vector Focus2D, Loc2D, Dest2D;
	local vector lookDir, moveDir, Y;

	bFire = 0;
	bAltFire = 0;
	DesiredSpeed = MaxDesiredSpeed;
	if (Region.Zone.bWaterZone)
	{
		PlaySwimming();
		return;
	}

	if (Focus == Destination)
	{
		LoopAnim('RunLg', -0.9/GroundSpeed,, 0.5);
		return;
	}
	Focus2D = Focus;
	Focus2D.Z = 0;
	Loc2D = Location;
	Loc2D.Z = 0;
	Dest2D = Destination;
	Dest2D.Z = 0;
	lookDir = Normal(Focus2D - Loc2D);
	moveDir = Normal(Dest2D - Loc2D);
	strafeMag = lookDir dot moveDir;
	if (strafeMag > 0.8)
		LoopAnim('StrafeR', -1.0/GroundSpeed,, 0.5);
	else if (strafeMag < -0.8)
		LoopAnim('StrafeL', -1.0/GroundSpeed,, 0.5);
	else
	{
		Y = (lookDir Cross vect(0,0,1));
		if ((Y Dot (Dest2D - Loc2D)) > 0)
		{
			if ( (AnimSequence == 'RunLg') || (AnimSequence == 'RunLg') )
				LoopAnim('RunLg', -2.5/GroundSpeed,, 1.0);
			else
				LoopAnim('RunLgFr', -2.5/GroundSpeed,0.1, 1.0);
		}
		else
		{
			if ( (AnimSequence == 'RunLg') || (AnimSequence == 'RunLg') )
				LoopAnim('RunLg', -2.5/GroundSpeed,, 1.0);
			else
				LoopAnim('RunLgFr', -2.5/GroundSpeed,0.1, 1.0);
		}
	}
}

function PlayMeleeAttack() {
local int hitdamage;
local float TargetDist, decision;

	decision = FRand();
	if (AnimSequence == 'Breath1l')
		decision += 0.2;
	else if (AnimSequence == 'Breath2l')
		decision -= 0.2;
	AttackSuccess = false;
	//log("Start Melee Attack");
	if (Region.Zone.bWaterZone || (decision < 0.5))
	{
		Acceleration = AccelRate * Normal(Target.Location - Location);
 		PlayAnim('Flip');
		PlaySound(Spin, SLOT_Interact);
 	}
	else
	{
		PlayAnim('Flip');
		PlaySound(Claw, SLOT_Interact);
	}
}


function PlayLeftDeath(name DamageType) {
	if ( FRand() < 0.5 )
		PlayAnim('Dead1',0.7,0.1);
	else
		PlayAnim('Dead7',0.7,0.1);
	PlaySound(Die, SLOT_Talk, 4.5 * TransientSoundVolume);
}


function PlayGutDeath(name DamageType)
{
	PlayAnim('Dead3',0.7, 0.1);
	PlaySound(Die, SLOT_Talk, 4.5 * TransientSoundVolume);
}


function PlayRightDeath(name DamageType) {
	if ( FRand() < 0.3 )
		PlayAnim('Dead2',0.7,0.1);
	else
		PlayAnim('Dead3',0.7,0.1);
	PlaySound(Die, SLOT_Talk, 4.5 * TransientSoundVolume);
}


function PlayBigDeath(name DamageType) {
	if ( FRand() < 0.35 )
		PlayAnim('Dead9B',0.7,0.1);
	else
		PlayAnim('Dead8',0.7,0.1);
	PlaySound(Die2, SLOT_Talk, 4.5 * TransientSoundVolume);
}


function PlayFiring() {
	TweenAnim('StillLgFr', 0.2);
	if ( (Weapon != None) && (Weapon.AmmoType != None) )
		Weapon.AmmoType.AmmoAmount = Weapon.AmmoType.Default.AmmoAmount;
}


function PlayHeadDeath(name DamageType) {
local carcass carc;

	if (((DamageType == 'Decapitated') || ((Health < -20) && (FRand() < 0.5))) && ! Level.Game.bVeryLowGore)
	{
		carc = Spawn(class 'CreatureChunks',,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) );
		if (carc != None)
		{
			carc.Mesh = mesh'headmalem';
			carc.Initfor(self);
			carc.Velocity = Velocity + VSize(Velocity) * VRand();
			carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z);
		}
		PlayAnim('Dead4',0.7,0.1);
	}
	else if ( FRand() < 0.5 )
		PlayAnim('Dead1',0.7,0.1);
	else
		PlayAnim('Dead8',0.7,0.1);
	PlaySound(Die, SLOT_Talk, 4.5 * TransientSoundVolume);
}


function PlayMovingAttack() {
local float strafeMag;
local vector Focus2D, Loc2D, Dest2D;
local vector lookDir, moveDir, Y;
local int bUseAltMode;

	if (Weapon != None)
	{
		if ( Weapon.AmmoType != None )
			Weapon.AmmoType.AmmoAmount = Weapon.AmmoType.Default.AmmoAmount;
		Weapon.RateSelf(bUseAltMode);
		ViewRotation = Rotation;
		if ( bUseAltMode == 0 )
		{
			bFire = 1;
			bAltFire = 0;
			Weapon.Fire(1.0);
		}
		else
		{
			bFire = 0;
			bAltFire = 1;
			Weapon.AltFire(1.0);
		}
	}
	else
	{
		PlayRunning();
		return;
	}

	if (Region.Zone.bWaterZone)
	{
		PlaySwimming();
		return;
	}

	DesiredSpeed = MaxDesiredSpeed;

	if (Focus == Destination)
	{
		LoopAnim('RunLgFr', -0.9/GroundSpeed,, 0.4);
		return;
	}
	Focus2D = Focus;
	Focus2D.Z = 0;
	Loc2D = Location;
	Loc2D.Z = 0;
	Dest2D = Destination;
	Dest2D.Z = 0;
	lookDir = Normal(Focus2D - Loc2D);
	moveDir = Normal(Dest2D - Loc2D);
	strafeMag = lookDir dot moveDir;
	if (strafeMag > 0.8)
		LoopAnim('StrafeR', -1.0/GroundSpeed,, 0.4);
	else if (strafeMag < -0.8)
		LoopAnim('StrafeL', -1.0/GroundSpeed,, 0.4);
	else
	{
		MoveTimer += 0.2;
		DesiredSpeed = 0.6;
		Y = (lookDir Cross vect(0,0,1));
		if ((Y Dot (Dest2D - Loc2D)) > 0)
		{
			if ( (AnimSequence == 'RunLgFr') || (AnimSequence == 'RunLgFr') )
				LoopAnim('Runlgfr', -2.5/GroundSpeed,, 1.0);
			else
				LoopAnim('Runlgfr', -2.5/GroundSpeed,0.1, 1.0);
		}
		else
		{
			if ( (AnimSequence == 'Runsmfr') || (AnimSequence == 'Runsmfr') )
				LoopAnim('runsmfr', -2.5/GroundSpeed,, 1.0);
			else
				LoopAnim('runsmfr', -2.5/GroundSpeed,0.1, 1.0);
		}
	}
}


function PlaySwimming()
{
	BaseEyeHeight = 0.7 * Default.BaseEyeHeight;
	if ((Weapon == None) || (Weapon.Mass < 20) )
		LoopAnim('SwimSM');
	else
		LoopAnim('SwimLG');
}



function PlayVictoryDance() {
	PlayAnim('Victory1', 0.6, 0.1);
}


function PlayLanded(float impactVel) {
	if ( GetAnimGroup(AnimSequence) == 'MovingFire' )
		TweenAnim('Landlgfr', 0.1);
	else if (impactVel > 1.7 * JumpZ)
		PlayAnim('Landlgfr',1.0,0.1);
	else
		TweenAnim('Landlgfr', 0.1);
}


function PlayInAir() {
	if ( AnimSequence == 'Breath2l' )
		PlayAnim('Breath2l', 0.4);
	else if (AnimSequence == 'Cockgun')
		PlayAnim('Chat1', 0.4);
	else
		TweenAnim('Lookl',0.4);
}



function TweenToFalling() {
	if ( FRand() < 0.5 )
		TweenAnim('walk', 0.2);
	else
		PlayAnim('Walk',0.7,0.1);
}


state MeleeAttack {
ignores SeePlayer, HearNoise, Bump;

ShieldDown:
	DesiredRotation = Rotator(Enemy.Location - Location);
	FinishAnim();
	Goto('Begin');
}


state FallingState {
ignores Bump, Hitwall, HearNoise, WarnTarget;

	function Landed(vector HitNormal)
	{
		local float landVol;

		if ( AnimSequence == 'Dead2' )
		{
			landVol = 0.75 + Velocity.Z * 0.004;
			LandVol = Mass * landVol * landVol * 0.01;
			PlaySound(sound'Thump', SLOT_Interact, landVol);
			GotoState('FallingState', 'RiseUp');
		}
		else if ( (AnimSequence == 'Chat1') || (AnimSequence == 'walk') )
		{
			landVol = Velocity.Z/JumpZ;
			landVol = 0.008 * Mass * landVol * landVol;
			if ( !FootRegion.Zone.bWaterZone )
				PlaySound(Land, SLOT_Interact, FMin(20, landVol));
			GotoState('FallingState', 'FinishDodge');
		}
		else
			Super.Landed(HitNormal);
	}

	function PlayTakeHit(float tweentime, vector HitLoc, int damage)
	{
		if ( AnimSequence != 'Dead2' )
			Global.PlayTakeHit(tweentime, HitLoc, damage);
	}

LongFall:
	if ( AnimSequence == 'Dead2' )
	{
		Sleep(1.5);
		Goto('RiseUp');
	}
	if ( bCanFly )
	{
		SetPhysics(PHYS_Flying);
		Goto('Done');
	}
	Sleep(0.7);
	TweenToFighter(0.2);
	if ( bHasRangedAttack && (Enemy != None) )
	{
		TurnToward(Enemy);
		FinishAnim();
		if ( CanFireAtEnemy() )
		{
			PlayRangedAttack();
			FinishAnim();
		}
		PlayChallenge();
		FinishAnim();
	}
	TweenToFalling();
	if ( Velocity.Z > -150 ) //stuck
	{
		SetPhysics(PHYS_Falling);
		if ( Enemy != None )
			Velocity = groundspeed * normal(Enemy.Location - Location);
		else
			Velocity = groundspeed * VRand();

		Velocity.Z = FMax(JumpZ, 250);
	}
	Goto('LongFall');
RiseUp:
	FinishAnim();
	bCanDuck = false;
	DesiredRotation = Rotation;
	Acceleration = vect(0,0,0);
	if ( !bFakeDeath )
		Sleep(1.0 + 6 * FRand());
	PlayAnim('Walk', 0.7);
FinishDodge:
	FinishAnim();
	bCanDuck = true;
	Goto('Done');
}


state RangedAttack {
ignores SeePlayer, HearNoise;

	function PlayRangedAttack()
	{
		local float dist;

		if ( GetAnimGroup(AnimSequence) == 'StillLgFr' )
		{
			TweenAnim('StillLgFr', 0.05);
			FireWeapon();
			return;
		}

		dist = VSize(Target.Location - Location + vect(0,0,1) * (CollisionHeight - Target.CollisionHeight));
		if ( (FRand() < 0.2) && (dist < 150 + CollisionRadius + Target.CollisionRadius) && (Region.Zone.bWaterZone || !Target.Region.Zone.bWaterZone) )
		{
			PlaySound(Lunge, SLOT_Interact);
	 		Velocity = 500 * (Target.Location - Location)/dist; //instant acceleration in that direction
	 		Velocity.Z += 1.5 * dist;
	 		if (Physics != PHYS_Swimming)
	 			SetPhysics(PHYS_Falling);
	 		Enable('Bump');
	 		PlayAnim('walk');
	 	}
		else
		{
			Disable('Bump');
			FireWeapon();
		}
	}

	function TryToDuck(vector duckDir, bool bReversed)
	{
		if ( FRand() < 0.5 )
			return;

		bFire = 0;
		bAltFire = 0;
		if ( AnimSequence == 'runlgfr' )
		{
			TweenAnim('runlgfr', 0.15);
			GotoState('RangedAttack');
			return;
		}
		if ( GetAnimGroup(AnimSequence) == 'chat1' )
		{
			if (FRand() < 0.75)
				GotoState('RThrust', 'walk');
			return;
		}

		Shield();
	}

	function KeepAttacking()
	{
		if ( bFiringPaused )
			return;
		if ( (FRand() > ReFireRate) || (Enemy == None) || (Enemy.Health <= 0) || !CanFireAtEnemy() )
		{
			if ( GetAnimGroup(AnimSequence) == 'StillLgFr' )
			{
				PlayAnim('stillLgFr');
				GotoState('RangedAttack', 'ShieldDown');
			}
			else
				GotoState('Attacking');
		}
	}


	function AnimEnd()
	{
		if ( (AnimSequence == 'Breath1l') || (FRand() < 0.5) || ((bFire == 0) && (bAltFire == 0)) )
			GotoState('RangedAttack', 'DoneFiring');
		else
			TweenAnim('runlgfr', 0.5);
	}
}


defaultproperties {
	CollisionRadius=24
	CollisionHeight=51

	Acquire=None
	BreathAgain=Sound'Botpack.MaleSounds.gasp02'
	claw=Sound'UnrealShare.Male.MJump3'
	Die=Sound'UnrealShare.Male.MDeath3'
	Die2=Sound'UnrealShare.Male.MDeath4'
	Fear=None
	FootStep=Sound'Botpack.FemaleSounds.stone02'
	FootStep2=Sound'Botpack.FemaleSounds.stone04'
	HairFlip=None
	HitSound1=Sound'UnrealShare.Male.MInjur1'
	HitSound2=Sound'UnrealShare.Male.MInjur2'
	HitSound3=Sound'UnrealShare.Male.MInjur3'
	HitSound4=Sound'UnrealShare.Male.MInjur4'
	Land=Sound'UnrealShare.Generic.Land1'
	Lunge=None
	Roam=None
	slice=Sound'UnrealShare.Male.MLand3'
	spin=Sound'UnrealShare.Male.MLand3'
	syllable1=None
	syllable2=None
	syllable3=None
	syllable4=None
	syllable5=None
	syllable6=None
	Threaten=None
	WaterStep=Sound'UnrealShare.Generic.LSplash'

	WeaponType=Class'assaultgun'

	LungeDamage=120
	SpinDamage=140
	ClawDamage=150

	CarcassType=Class'Botpack.TMale1Carcass'

	TimeBetweenAttacks=0.80
	Aggressiveness=0.75
	RefireRate=0.80
	MeleeRange=0.50
	Health=400
	Skill=0.90
	AnimSequence=WalkLg
	AmbientSound=None

	Skin=None
	MenuName="Humangrant"
	Mesh=LodMesh'Botpack.Commando'
	DrawScale=1.20
	MultiSkins(0)=Texture'commandoskins_grants.afbd1'
	MultiSkins(1)=Texture'commandoskins_grants.afbd2Iron'
	MultiSkins(2)=Texture'commandoskins_grants.afbd3'
	MultiSkins(3)=Texture'commandoskins_grants.afbd4'
}
(Nota bene: While digging into these animation functions, I probably found a bug in function SkaarjTrooper.PlayCock ()).

<EDIT>Added "code preview" for SBHumaneFixes</EDIT>
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett

User avatar
sektor2111
Godlike
Posts: 5430
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Mesh "Commando": "CockGunL" vs. "CockGun"

Post by sektor2111 » Mon Jul 17, 2017 3:16 pm

Barbie wrote:(Nota bene: While digging into these animation functions, I probably found a bug in function SkaarjTrooper.PlayCock ()).
Thanks, good to know, now it's fixed :thuup: , at once with state charging...

nogardilaref
Masterful
Posts: 577
Joined: Tue Jun 20, 2017 1:00 pm
Personal rank: ⚋⚊⚌☰⚞⌖⚟☰⚌⚊⚋

Re: Mesh "Commando": "CockGunL" vs. "CockGun"

Post by nogardilaref » Mon Jul 17, 2017 8:04 pm

Barbie wrote: (Nota bene: While digging into these animation functions, I probably found a bug in function SkaarjTrooper.PlayCock ()).
Image

User avatar
sektor2111
Godlike
Posts: 5430
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Mesh "Commando": "CockGunL" vs. "CockGun"

Post by sektor2111 » Tue Jul 18, 2017 5:15 am

Ah, related to frames naming "convention" this is recalling me what old people are saying: Do what the priest says not what the priest does, because we have under remark the advice about animations to be respected but all "Pawn" type in this UT has a default animation sequence "Fighter" which doesn't exist in at least 6 classes and some of them are doing errors in game at this point, lol "Convention" :loool: .
It's like: Hey you need to do that, but I don't do that even if I have to. Sometimes this dumb default content is funny and good to learn how to not do.