Jump to content
Sign in to follow this  
Miroslaw Kowalski

Reload animation for revolver

Recommended Posts

Hey guys,

 

I made a revolver for ArmA III and it's almost done. The only thing I'm missing is the part of the animation where the bullets fall out of the drum and then get put into the drum again. Like in the Vanilla revolver but unfortunately I can't find the model.cfg for it. Does anybody have an idea or maybe a working model.cfg?

 

Thanks

Buster

Share this post


Link to post
Share on other sites

You'd need to add an extra selection for the shell casings and have them linked to the cylinder via cfg Skeletons, and an axis for them to move along. Something like this:

class CfgSkeletons
{
	class MY_Revolver
	{
		pivotsModel="";
		isDiscrete = 0;
		skeletonInherit = "";
		skeletonBones[] =
		{
			"cylinder","",
                        "bullets_axis","cylinder",
			"bullets","cylinder"
		};
	};
};

You probably don't need to add the bullets_axis to the skeleton since I think in your case you'd always want it along the Z-axis of the weapon anyway - i.e the axis doesn't really need to move with the cylinder since its direction is always the same whether the cylinder is in the open or closed state. But It's something I do out of habit.

 

Anyway, one would then add a couple of extra animation stages to the reloadMagazine sourced animation so that you have the cylinder open, casings fall out and hide, casings reappear and move back inside the cylinder, then close the cylinder.

class CfgModels
{
	class Default
	{
		sectionsInherit="";
		sections[]={};
		skeletonName="";
	};

	class Revolver: Default //classname must match .p3d name
	{
		skeletonName = "MY_Revolver";
		sectionsInherit = "";
		sections[] = {"muzzleFlash","Camo"};

		class Animations
		{
			class cylinder_reload_open
			{
				type = "rotation";
				source = "reloadMagazine";
				selection = "cylinder";
				axis = "cylinder_axis";
				minValue = 0.135;
				maxValue = 0.170;
				angle0=0;
				angle1="rad 90";
			};
			
			class bullets_reload_move_1
			{
				type = "translation";
				source = "reloadMagazine";
				selection = "bullets";
				axis = "bullets_axis";
				minValue = 0.175;
				maxValue = 0.190;
				offset0 = 0.0;
				offset1 = 0.5;
			};

			class bullets_reload_hide
			{
				type="hide";
				source="reloadMagazine";
				selection="bullets";
				minValue=0.000000;
				maxValue=1.00000;
				hideValue=0.190;
				unhideValue = 0.550;
			};

			class bullets_reload_move_2: magazine_reload_move_1
			{
				minValue = 0.573;
				maxValue = 0.602;
				offset0 = 0.0;
				offset1 = -0.5;
			};

			class cylinder_reload_close: cylinder_reload_open
			{
				minValue = 0.700;
				maxValue = 0.900;
				angle0=0;
				angle1="rad -90";
			};
		};
	};
};

The minvalue/maxValue, hide/unhide settings need tweaking to alter the timings and match the hand animation but you can see they are sequential.

 

The offset values in the bullets_reload_move are related to the distance between your two bullets_axis memory points - if offset1 = 1; the bullets will translate the whole length of the axis, if offset1 = 0.5; they will move half the length of the axis. Using -ve values will move them in the opposite direction

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×