Example #1
0
/*
================
sdWalker::Spawn
================
*/
void sdWalker::Spawn( void ) {
	animator.RemoveOriginOffset( true );
	animator.ClearAllAnims( gameLocal.time, 0 );
	animator.ClearAllJoints();
	int anim = animator.GetAnim( "base" );
	animator.PlayAnim( ANIMCHANNEL_TORSO, anim, gameLocal.time, 0 );
	animator.CreateFrame( gameLocal.time, true );

	LoadAF();

	LoadVehicleScript();

	if ( !spawnArgs.GetBool( "ik_disabled", "0" ) ) {
		LoadIK();
	}

	physicsObj.SetSelf( this );
	physicsObj.SetClipModel( new idClipModel( GetPhysics()->GetClipModel() ), 1.0f );
	physicsObj.SetMass( spawnArgs.GetFloat( "mass", "10000" ) );
	physicsObj.SetClipMask( MASK_VEHICLESOLID | CONTENTS_WALKERCLIP | CONTENTS_MONSTER );

	// move up to make sure the monster is at least an epsilon above the floor
	physicsObj.SetOrigin( GetPhysics()->GetOrigin() + idVec3( 0, 0, CM_CLIP_EPSILON ) );
	physicsObj.SetAxis( mat3_identity );
	
	idVec3 gravity = spawnArgs.GetVector( "gravityDir", "0 0 -1" );
	float gravityScale;
	if ( spawnArgs.GetFloat( "gravity", DEFAULT_GRAVITY_STRING, gravityScale ) ) {
		gravity *= gravityScale;
	} else {
		gravity *= g_gravity.GetFloat();		
	}

	physicsObj.SetGravity( gravity );
	SetPhysics( &physicsObj );

	BecomeActive( TH_THINK );

	physicsObj.SetMaxStepHeight( spawnArgs.GetFloat( "ik_maxStepSpeed", "1" ) );
	physicsObj.SetContents( CONTENTS_MONSTER );

	stompDamage			= gameLocal.declDamageType[ spawnArgs.GetString( "dmg_stomp" ) ];
	minStompScale		= spawnArgs.GetFloat( "stomp_min_scale" );
	maxStompScale		= spawnArgs.GetFloat( "stomp_max_scale" );
	stompSpeedScale		= spawnArgs.GetFloat( "stomp_speed_scale" );

	groundPoundMinSpeed	= spawnArgs.GetFloat( "ground_pound_min_speed", "200" );
	groundPoundForce	= spawnArgs.GetFloat( "ground_pound_force", "25000000" );
	groundPoundRange	= spawnArgs.GetFloat( "ground_pound_range", "512" );

	kickForce			= spawnArgs.GetFloat( "kick_force", "25000000" );

	UpdateVisuals();

	Present();
}
/*
================
rvMonsterFailedTransfer::OnDeath
================
*/
void rvMonsterFailedTransfer::OnDeath ( void ) {
	idAI::OnDeath ( );
	
	if ( allowSplit ) {
		idEntity* torso;
		idDict	  args;

		LoadAF ( "ragdoll_legs", true );

		PlayEffect ( "fx_bloodyburst", animator.GetJointHandle ( "chest" ) );	
		SetSkin ( declManager->FindSkin	 ( spawnArgs.GetString ( "skin_legs" ) ) );

		args.Copy ( *gameLocal.FindEntityDefDict ( "monster_failed_transfer_torso" ) );
		args.SetVector ( "origin", GetPhysics()->GetOrigin() + GetPhysics()->GetGravityNormal() * -50.0f );
		args.SetInt ( "angle", move.current_yaw );
		gameLocal.SpawnEntityDef ( args, &torso );
		torso->fl.takedamage = false;
		PostEventMS( &AI_TakeDamage, 100, 1.0f );
	}
}
/*
================
rvMonsterFailedTransfer::Spawn
================
*/
void rvMonsterFailedTransfer::Spawn ( void ) {
	LoadAF ( "ragdoll_legs", true );
	LoadAF ( NULL, true );
}
Example #4
0
/*
=====================
idActor::Spawn
=====================
*/
void idActor::Spawn( void ) {
	idEntity		*ent;
	idStr			jointName;
	float			fovDegrees;
	copyJoints_t	copyJoint;

	animPrefix	= "";


	spawnArgs.GetInt( "rank", "0", rank );
	spawnArgs.GetInt( "team", "0", team );
	spawnArgs.GetVector( "offsetModel", "0 0 0", modelOffset );

	spawnArgs.GetBool( "use_combat_bbox", "0", use_combat_bbox );	

	viewAxis = GetPhysics()->GetAxis();

	spawnArgs.GetFloat( "fov", "90", fovDegrees );
	SetFOV( fovDegrees );


	pain_debounce_time	= 0;

	pain_delay		= SEC2MS( spawnArgs.GetFloat( "pain_delay" ) );
	pain_threshold	= spawnArgs.GetInt( "pain_threshold" );

	LoadAF();

	walkIK.Init( this, IK_ANIM, modelOffset );
	reachIK.Init( this, IK_ANIM, modelOffset );

	// the animation used to be set to the IK_ANIM at this point, but that was fixed, resulting in
	// attachments not binding correctly, so we're stuck setting the IK_ANIM before attaching things.
	animator.ClearAllAnims( gameLocal.time, 0 );
	animator.SetFrame( ANIMCHANNEL_ALL, animator.GetAnim( IK_ANIM ), 0, 0, 0 );

	// spawn any attachments we might have
	//const idKeyValue *kv = spawnArgs.MatchPrefix( "def_attach", NULL );
	//while ( kv ) {
	//	idDict args;

	//	args.Set( "classname", kv->GetValue().c_str() );

	//	// make items non-touchable so the player can't take them out of the character's hands
	//	args.Set( "no_touch", "1" );

	//	// don't let them drop to the floor
	//	args.Set( "dropToFloor", "0" );

	//	//gameLocal.SpawnEntityDef( args, &ent );
	//	if ( !ent ) {
	//		gameLocal.Error( "Couldn't spawn '%s' to attach to entity '%s'", kv->GetValue().c_str(), name.c_str() );
	//	} else {
	//		Attach( ent );
	//	}
	//	kv = spawnArgs.MatchPrefix( "def_attach", kv );
	//}

	SetupDamageGroups();
	//SetupHead();

	// clear the bind anim
	animator.ClearAllAnims( gameLocal.time, 0 );

	finalBoss = spawnArgs.GetBool( "finalBoss" );

	FinishSetup();

	idRenderModelMD5* pModel = (idRenderModelMD5*)renderEntity.hModel;
	idMD5Mesh* mesh;
	int i;
	for( mesh = pModel->meshes.Ptr(), i = 0; i < pModel->meshes.Num(); i++, mesh++ ) {
		const idMaterial *shader = mesh->shader;

		/*shader = R_RemapShaderBySkin( shader, renderEntity.customSkin, renderEntity.customShader );		
		if ( !shader || ( !shader->IsDrawn() && !shader->SurfaceCastsShadow() ) ) {
			continue;
		}*/
	}

	// Test
	BecomeActive( TH_THINK | TH_PHYSICS );
}